只用一个栈顶指针top(没有bottom)实现的链式栈
2015-12-27 16:57
393 查看
#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define UNDERFLOW -2 struct LNode// 链式栈s中的结点结构 { char data;//数据 struct LNode *next;//指针 }; struct LStack{ struct LNode *top;//栈顶指针,这个栈结构没有bottom指针,感觉更简洁! } Status InitStack(LStack &s) //构造一个空栈 { struct LNode *p; p=(LNode *)malloc(sizeof(LNode)); if(!p) { printf("存储分配失败!"); exit(OVERFLOW); } s.top=p; p->next=NULL; return OK; } Status DestoryStack(LStack &s) //初始条件:栈s已存在 //操作结果:销毁栈 { struct LNode *p; p=s.top; while(p) { s.top=p->next; free(p); p=s.top; } return OK; } Status StackEmpty(LStack s) ////初始条件:栈s已存在 //操作结果:若栈为空栈,返回true,否则返回false { if(s.top->next==NULL) return TRUE; return FALSE; } Status StackLength(LStack s) //初始条件:栈s已存在 //操作结果:返回s的元素个数,即栈的长度 { int length=0; struct LNode *p; p=s.top; while(p){ length++; p=p->next; } return length; } Status Push(LStack &s,ElemType e) //初始条件:栈s已存在 //操作结果:插入元素e成为新的栈顶元素 { struct LNode *p; p=(LNode *)malloc(sizeof(LNode)); if(!p) exit(OVERFLOW); p->data=e; p->next=s.top; s.top=p; return OK; } Status Pop(LStack &s,ElemType &e) //初始条件:栈s已存在且非空 //操作结果:删除s的栈顶元素,并且用e返回其值 { struct LNode *p; if(!(s.top->next)) exit(ERROR); p=s.top; s.top=p->next; e=p->data; free(p); return OK; } Status GetTop(LStack s,ElemType &e) //初始条件:栈s已存在且非空 //操作结果:用e返回s的栈顶元素 { if(!(s.top->next)) exit(ERROR); e = s.top->data; s.top=s.top->next; e=s.top->data; return OK; } Status StackTraverse(LStack s) //从栈顶开始依次输出 { struct LNode *p; if(!(s.top->next)) exit(ERROR); p=s.top; while(p) { cout<<p->data<<endl; p=p->next; } return OK; }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#数据结构之顺序表(SeqList)实例详解
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 关于C语言中参数的传值问题