您的位置:首页 > 理论基础 > 数据结构算法

栈的基本操作

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++ 数据结构