#include<iostream>
#define MAXSIZE 999
#define OK 1
#define ERROR 0
using namespace std;
typedef int elemtype;
typedef int Status;
typedef struct {
elemtype *base;
elemtype *top;
int stacksize;
}sqstack;
//顺序栈的初始化
Status InitStack(sqstack &s){
s.base=new elemtype[MAXSIZE];//为顺序栈分配一个MAXSIZE大的存储空间
if(!s.base) exit(ERROR);//存储分配失败
s.top=s.base;//top初始为base,空栈
s.stacksize=MAXSIZE;//stacksize置为栈的最大容量MAXSIZE
return OK;
}
//入栈
Status Push(sqstack &s,elemtype e){
if(s.top-s.base==MAXSIZE) return ERROR;//栈满退出
*s.top++=e; //元素e压入栈顶,栈顶指针加1
return OK;
}
//出栈
Status Pop(sqstack &s,elemtype &e){
if(s.top==s.base) return ERROR;//栈空退出
e=*--s.top; //栈顶指针减1,将栈顶元素赋给e
return OK;
}
//取栈顶元素
elemtype Gettop(sqstack s){
if(s.top!=s.base)//判断栈非空
return *(s.top-1);//返回栈顶元素,栈顶指针不变
}
sqstack s;
int main(void){
int x,n,i,j;
elemtype e;
InitStack(s);
cout<<"顺序栈简单操作目录:\n"
<<"1.入栈\n"
<<"2.出栈\n"
<<"3.取栈顶元素\n"
<<"4.退出\n";
while(OK){
cout<<"输入操作序号:";
cin>>x;
switch(x){
case 1:cout<<"请输入要入栈的元素的个数:";
cin>>n;
cout<<"请依次输入"<<n<<"个数字: " ;
for(i=1;i<=n;i++){
cin>>e;
Push(s,e);
}break;
case 2:cout<<"请输入要出栈的元素的个数:" ;
cin>>n;
cout<<"出栈元素为:";
for(i=1;i<n;i++){
Pop(s,e);
cout<<e<<" ";
}
Pop(s,e);
cout<<e<<endl;
break;
case 3:cout<<"栈顶元素为:";
cout<<Gettop(s)<<endl; break;
case 4:exit(0);
}
}
return 0;
}
顺序栈的简单实现
猜你喜欢
转载自blog.csdn.net/qq_45918426/article/details/104332151
今日推荐
周排行