数据结构-链栈
2016-04-04 10:29
344 查看
/* 编写一个程序,实现链栈(假设栈中元素类型为char)的各种基本运算。并完成下面功能: (1)初始化链栈s; (2)判断链栈s是否非空; (3)依次进链栈元素a,b,c,d,e; (4)判断链栈s是否非空; (5)输出链栈长度; (6)输出从栈顶到栈底元素; (7)输出出链栈序列; (8)判断链栈s是否非空; (9)释放链栈。 */ #include <iostream> #include <malloc.h> #include <cstdio> #include <cstring> using namespace std; typedef char ElemType; typedef struct linknode { ElemType data; struct linknode *next; }LiStack; //定义链栈类型 void InitStack(LiStack *&s) //初始化链栈s { s=(LiStack *)malloc(sizeof(LiStack)); s->next=NULL; } bool StackEmpty(LiStack *s) //判断链栈s是否非空 { return (s->next!=NULL); } void Push(LiStack *&s,ElemType e) //进栈 { LiStack *p; p=(LiStack *)malloc(sizeof(LiStack)); p->data=e; p->next=s->next; s->next=p; } int getLength(LiStack *s) //输出链栈长度 { int i=0; LiStack *p=s->next; while(p!=NULL) { i++; p=p->next; } return (i); } void DispStack(LiStack *s) //输出从栈顶到栈底元素 { LiStack *p=s->next; while(p!=NULL) { cout<<p->data<<" "; p=p->next; } cout<<endl; } bool Pop(LiStack *&s,ElemType &e) //出栈 { LiStack *p; if(s->next==NULL) return false; p=s->next; e=p->data; s->next=p->next; free(p); return true; } void DestoryStack(LiStack *&s) //释放链栈 { LiStack *p=s,*q=s->next; while(q!=NULL) { free(p); p=q; q=p->next; } } int main() { ElemType a[10],b; LiStack *s; InitStack(s); cout<<"链栈是否非空?"; if(StackEmpty(s)) cout<<"是"<<endl; else cout<<"否"<<endl; cout<<"输入要进栈元素:"; gets(a); for(int i=0;i<strlen(a);i++) { Push(s,a[i]); } cout<<"元素已进栈"<<endl; cout<<"链栈是否非空?"; if(StackEmpty(s)) cout<<"是"<<endl; else cout<<"否"<<endl; cout<<"栈的长度:"<<getLength(s)<<endl; cout<<"输出从栈顶到栈底元素:"; DispStack(s); cout<<"链栈是否非空?"; if(StackEmpty(s)) cout<<"是"<<endl; else cout<<"否"<<endl; cout<<"输出出栈序列:"; for(int i=getLength(s)-1;i>=0;i--) { Pop(s,b); cout<<b<<" "; } cout<<endl; cout<<"链栈是否非空?"; if(StackEmpty(s)) cout<<"是"<<endl; else cout<<"否"<<endl; DestoryStack(s); cout<<"栈已释放!"<<endl; return 0; }
运行结果:
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)