顺序栈的基本操作

来源:互联网 发布:淘宝威客平台 编辑:程序博客网 时间:2024/06/18 14:03
//----顺序栈基本操作----- #include<iostream>#include<process.h>#include<malloc.h>#define STACK_INIT_SIZE 10//存储空间初始分配量 #define STACKINCREMENT 5 //存储空间分配增量 #define OVERFALOW -2#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int Status;typedef int SElemType;using namespace std;typedef struct{SElemType *base;//栈底指针 SElemType *top;//栈顶指针 int stacksize;//栈当前的最大容量 }SqStack;Status InitStack(SqStack &S){//初始化顺序栈 S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!S.base)//如果 S.base=NULL则存储失败执行exit函数结束程序 exit(OVERFALOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK; }Status StackEmpty(SqStack S){//判空,若栈S为空则返回TRUE否则返回FALSEif(S.top==S.base)return TRUE;return FALSE; //当栈顶指针top等于栈底指针base是栈为空 }void CreatSqStack(SqStack &S){//栈的赋值 int i;int N;cout<<"Please input the Number of the Stack: ";cin>>N;cout<<"Please input the elements: ";for(i=1;i<=N;i++){cin>>*S.top;S.top++;}}Status Push(SqStack &S,SElemType e){if(S.top-S.base>=S.stacksize){//栈满,追加存储空间 S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S.base)exit(OVERFALOW);//存储分配失败 S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;return OK; }  Status GetTop(SqStack S,SElemType &e){//若栈不为空,则用e返回S的栈顶元素,并返回OK,否则返回ERROR if(S.top!=S.base) return ERROR;e=*(S.top-1);return OK;}Status Pop(SqStack &S,SElemType &e){//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR if(S.top==S.base)return ERROR;e=*--S.top;return OK;}Status StackTraverse(SqStack S,Status(*visit)(SElemType)){//从栈底到栈顶依次遍历栈中的每一个元素 while(S.top>S.base)visit(*S.base++);cout<<endl;return OK;}int StackLength(SqStack S){//返回栈的长度    return S.top-S.base;}Status DestroyStack(SqStack &S){//销毁栈,与清空栈的区别是想要再次使用栈时必须重新初始化建栈 free(S.base);S.base=NULL;//栈结构不存在 S.top=NULL;S.stacksize=0;return OK; }Status ClearStack(SqStack &S){//清空栈 S.top=S.base;return OK; }Status visit(SElemType c){cout<<c<<' ';return OK;}int main(){SqStack S;SElemType e;int i,j;if(InitStack(S))cout<<"成功建立空栈"<<endl;elsecout<<"建立空栈失败"<<endl;if(StackEmpty(S))cout<<"栈S为空栈"<<endl;elsecout<<"栈S不为空"<<endl;CreatSqStack(S);cout<<"栈S的长度为: "<<StackLength(S)<<endl;cout<<"栈中的元素为: ";StackTraverse(S,visit);cout<<"向栈中插入元素: 1 1 0"<<endl;Push(S,1);Push(S,1);Push(S,0);cout<<"栈中的元素为: ";StackTraverse(S,visit);GetTop(S,e);cout<<"栈顶元素为 "<<e<<endl;cout<<"取出栈中的所有元素 ";while(!StackEmpty(S)){Pop(S,e);cout<<e<<' ';  } cout<<endl;if(StackEmpty(S))cout<<"取出所有元素后栈S为空栈"<<endl;elsecout<<"取出所有元素后栈S不为空"<<endl;cout<<"向栈中依次插入1~10元素"<<endl;for(j=1;j<=10;j++)Push(S,j);cout<<"栈中的元素为: ";StackTraverse(S,visit);cout<<"调用ClearStack()函数清空栈"<<endl;ClearStack(S);if(StackEmpty(S))cout<<"清空栈后栈S为空栈"<<endl;elsecout<<"清空栈后栈S不为空"<<endl;DestroyStack(S);  } 

原创粉丝点击