只用一个栈顶指针top(没有bottom)实现的链式栈
来源:互联网 发布:win7 网络共享 编辑:程序博客网 时间:2024/05/29 10:06
#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;}
0 0
- 只用一个栈顶指针top(没有bottom)实现的链式栈
- C语言实现的一个链式栈
- 顺序栈(含有栈顶指针,栈底指针)的实现以及编写过程中的一些疑惑的解决
- 栈的链式实现
- 链式栈的实现
- 栈的链式实现
- 链式栈的实现
- 链式栈的实现
- 链式栈的实现
- 链式栈的实现
- 链式栈的实现
- 栈的链式实现
- 栈的实现(链式)
- 链式栈的实现
- 链式栈的实现
- 链式栈的实现
- 链式栈的实现
- 栈的链式实现
- Eclipse下搭建C/C++开发环境
- hdu2412Party at Hali-Bula【树型DP入门题】
- 读取文件夹下的所有文件
- 芒果iOS开发之Merge branch 'master' of XXX Please enter a commit message to explain why this merge
- 函数式编程(functional programming)学习总结
- 只用一个栈顶指针top(没有bottom)实现的链式栈
- 装饰者模式(heade first设计模式读书笔记)
- 关于优秀博客那点事
- Linux网络编程之UDP协议(完整版)
- 23种设计模式(22)_行为型_责任链模式(Chain of Responsibility Pattern)
- 关于扫描线的一些理解
- SpringMVC + mybatis 传参中文乱码问题
- 自动化管理工具Saltstack之定时管理(9)
- 如何学习递归,回溯,DFS,BFS.