#include <iostream> using namespace std; #define MAXSIZE 100 //顺序栈存储空间初始分配大小 #define OK 1 #define ERROR 0 #define OVERFLOW -1 typedef struct //顺序栈结构定义 { int *base; //栈底指针 int *top; //栈顶指针 int stacksize; //栈可使用的最大容量 } Sqstack; //初始化,构造一个空栈 int Init_Stack(Sqstack &s) { s.base = new int[MAXSIZE]; //为顺序栈动态分配一个最大容量为MAXSIZE的数组空间 if(!s.base) exit(-1); //分配失败则退出 s.top = s.base; //top初始为base,表栈空 s.stacksize = MAXSIZE; return 0; } //入栈操作 int Push_Stack(Sqstack &s, int e) { if(s.top - s.base == s.stacksize) //栈满退出 return 1; *s.top++ = e; //将元素e压入栈顶,同时栈顶指针加1 //等同于*s.top=e;s.top++; return 0; } //出栈操作 int Pop_Stack(Sqstack &s) { if(s.top == s.base) return 1; //栈空 --s.top; //栈顶指针减1 return 0; } //取栈顶元素 int Get_Top(Sqstack s) { if(s.top != s.base) //栈非空 return *(s.top - 1); //栈顶指针不变,返回栈顶元素的值 } //输出栈 void printstack(Sqstack s) { while((s.top != s.base)) //栈非空 { cout << Get_Top(s) << " "; Pop_Stack(s); } cout << endl; } int main() { Sqstack s; Init_Stack(s); for (int i = 0; i < 10; ++i) { Push_Stack(s, i); } int a, b; cout << "1--print,2--pop,3--push,0--exit\n"; for(int i = 0; i < 4; ++i) { cin >> a; if (a == 1) { printstack(s); } else if (a == 3) { cout << "元栈为:"; printstack(s); cout << "请输入要插入的数:"; cin >> b; Push_Stack(s, b); cout << "插入后栈为:"; printstack(s); } else if (a == 2) { cout << "元栈为:"; printstack(s); //cout<<"请输入要插入的数:"; //cin>>b; Pop_Stack(s); cout << "pop后栈为:"; printstack(s); } else if (a == 0) { return 0; } } return 0; }
数据结构期末复习(いち)--顺序栈的定义及使用
猜你喜欢
转载自blog.csdn.net/qq_41684261/article/details/80639768
今日推荐
周排行