目录
顺序栈
特点:先进后出
1、存储结构
#include<bits/stdc++.h> using namespace std; #define MAXSIZE 110 //顺序栈存储空间的初始分配量 #define OK 1 //成功标识 #define ERROR 0 //失败标识 typedef int Status; //Status是函数的类型,其值是函数结果状态代码,如OK等 typedef struct { int *base; int *top; int stacksize; }Sqstack;
2、初始化
//初始化 Status init(Sqstack &s) { s.base =new int[MAXSIZE];//为顺序栈分配空间 if(!s.base ) exit(OVERFLOW);//存储失败 s.top =s.base ;//空栈 s.stacksize = MAXSIZE; return OK; }
3、入栈
//入栈 Status Push(Sqstack &s,int e) { if(s.top -s.base ==s.stacksize )//栈满 return ERROR; *s.top ++=e;//注意k++是先计算式子再加1,++k是先加1 //所以该语句是先将e入栈,然后改变栈顶指针 return OK; }
4、出栈
//出栈 Status Pop(Sqstack &s,int &e) { if(s.top ==s.base )//栈空 return ERROR; e=*--s.top ;//注意k--是先计算式子再减1,--k是先减去1 //所以该语句是先改变栈顶指针 ,然后取值 return OK; }
5、得到栈顶元素
//取栈顶元素 int Get(Sqstack s) { if(s.top !=s.base )//栈非空 return *(s.top -1);//返回栈顶元素,栈顶指针不变 //理解s=i-1和s=i--的区别 }
6、输出栈中元素
Status Put(Sqstack s) { int i=0; while(s.top-i !=s.base) { i++; cout<<(*(s.top -i))<<' ';//返回栈元素,栈顶指针不变 } return OK; }
7、主函数
int main() { Sqstack s; init(s); int n,k,e[100]; cout<<"请输入你要入栈元素个数:"; cin>>n; cout<<"请输入你要入栈元素:"; for(int i=0;i<n;i++) { cin>>e[i]; Push(s,e[i]); } cout<<"请输入你要出栈元素个数:"; cin>>n; for(int i=0;i<n;i++) { Pop(s,k); } cout<<"当前栈中元素:"; Put(s); return 0; }