栈的基本操作
2015-09-07 14:17
429 查看
本文由我的新浪博客搬迁过来,由于新浪博客编辑实在蛋疼……
#includeusing namespace std;#define ERROR -1#define OK 1#define STACK_INIT_SIZE 100#define INCREMENT 10typedef char Elemtype;typedef int Status;typedef struct{Elemtype *base;Elemtype *top;int Stacksize;}SqStack;//初始化栈Status InitStack(SqStack &S){S.base = (Elemtype *)malloc(sizeof(Elemtype) * STACK_INIT_SIZE);if(!S.base)return ERROR;S.top = S.base;S.Stacksize = STACK_INIT_SIZE;return OK;}//元素入栈Status PushStack(SqStack &S){Elemtype str;if(S.top - S.base >= S.Stacksize){S.base = (Elemtype *)realloc(S.base,(S.Stacksize + INCREMENT) * sizeof(Elemtype)); //realloc为重新分配空间函数,第一个参数为要重新分配的指针名if(!S.base)return ERROR;S.top = S.base + S.Stacksize;S.Stacksize += INCREMENT;}while((str = getchar()) != '#')*S.top++ = str;return OK;}//判断栈是否为空bool StackEmpty(SqStack S){if(S.base==S.top)return true;elsereturn false;}//显示栈内所有元素void DisplayStack(SqStack s){if(StackEmpty(s))exit(-1);while(s.top!=s.base)cout<<*(--s.top)<<" ";}//栈顶元素出栈Status PopStack(SqStack &S){Elemtype str;if(S.top == S.base)return ERROR;cout<<"栈顶元素出栈:"<<endl;str = *--S.top;cout<<str<<" ";return OK;}//取栈顶元素Status GetTop(SqStack S){Elemtype e;if(S.top == S.base)return ERROR;e = *--S.top;cout<<"当前栈顶元素为:"<<e<<endl;return OK;}//求栈的元素个数,即栈长Status LenStack(SqStack S){int length = 0;if(S.base == S.top)return 0;else{ while(S.top != S.base){S.top--;length++;}//whilereturn length;}//else}//销毁栈空间Status DestoryStatck(SqStack &s){s.top=s.base;free(s.base);s.base=NULL;s.top=NULL;return OK;}int main(){int length;SqStack S;Elemtype str;InitStack(S); //初始化栈PushStack(S); //元素入栈GetTop(S); //求栈顶元素length = LenStack(S); //求栈长cout<<"栈的长度为:";cout<<length<<endl;PopStack(S); //栈顶元素出栈cout<<"栈内元素为:"<<endl;DisplayStack(S); //输出所有栈元素DestoryStatck(S); //销毁栈length = LenStack(S);cout<<"栈的长度为:"<<length<<endl;return OK;}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(七):数据结构详解
- Lua教程(二):C++和Lua相互传递数据示例
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例