#include<iostream>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
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 int[MAXSIZE];
if(!S.base)
return OVERFLOW;
S.top=S.base;
S.stackSize=MAXSIZE;
return OK;
}
//创建栈
Status StackCreate(sqStack &S,int e){
if(S.top-S.base==S.stackSize)
return ERROR;
*S.top=e;
S.top++;
}
//打印栈
Status sqStack_print(sqStack S){
ElemType e;
while(S.top!=S.base){
S.top--;
e=*S.top;
cout<<e<<endl;
}
return OK;
}
//压栈
Status Push(sqStack &S,int e){
if(S.top-S.base==S.stackSize)
return ERROR;
*S.top=e;
S.top++;
return OK;
}
//取出栈顶元素
Status getTop(sqStack S,int &e){
if(S.top==S.base)
return ERROR;
e=*(S.top-1);
return OK;
}
//弹栈
Status Pop(sqStack &S,int &e){
if(S.top==S.base){
return ERROR;
}
e=*--S.top;
return OK;
}
int main(){
int n,e,i,p,q,t;
sqStack S;
InitStack(S);
//(1)根据输入的栈中元素个数n和各元素值建立一个顺序栈,并输出栈中各元素值。
cout<<"请输入栈的元素个数:"<<endl;
cin>>n;
cout<<"请分别输入栈中元素数据:"<<endl;
for(i=0;i<n;i++){
cin>>e;
StackCreate(S,e);
}
cout<<"目前栈中有"<<S.top-S.base<<"个数据元素,如下所示:"<<endl;
sqStack_print(S);
//(2)将数据元素e入栈,并输出入栈后的顺序栈中各元素值。
cout<<"请输入压栈数据元素:"<<endl;
cin>>p;
Push(S,p);
cout<<"目前栈中有"<<S.top-S.base<<"个数据元素,如下所示:"<<endl;
sqStack_print(S);
//(3)将顺序栈中的栈顶元素出栈,并输出出栈元素的值和出栈后顺序栈中各元素值。
getTop(S,q);
cout<<"此时的栈顶元素为:"<<q<<endl;
cout<<"弹栈后,"<<endl;
Pop(S,t);
cout<<"目前栈中有"<<S.top-S.base<<"个数据元素,如下所示:"<<endl;
sqStack_print(S);
return OK;
}
C++,简单的顺序栈
最新推荐文章于 2023-09-12 13:26:59 发布