考研原题共享栈/双栈来咯!
#include <iostream>
using namespace std;
#define OK 1
#define FALSE 0
#define ERROR -1
#define OVERFLOW -2
typedef int SElemType;
typedef int Status;
typedef struct{
int top[2],bot[2];
SElemType *V;
int m;
}DblStack;
Status InitDblStack(DblStack &S,int len){
S.m=len;
S.V=new SElemType[S.m];
S.top[0]=-1;
S.top[1]=S.m;
return OK;
}
bool DblStackEmpty(DblStack S){
if(S.top[0]==-1&&S.top[1]==S.m)
{
return true;
}
return false;
}
bool DblStackFull(DblStack S){
return S.top[1]-S.top[0]==1;
}
Status Push(DblStack &S,int i,SElemType e){
if(i!=0&&i!=1)
return ERROR;
if(DblStackFull(S))
return OVERFLOW;
switch(i)
{
case 0:{
S.V[++S.top[0]]=e;
return OK;
}
case 1:{
S.V[--S.top[1]]=e;
return OK;
}
}
}
Status Pop(DblStack &S,int i,SElemType &e){
if(i!=0&&i!=1)
return ERROR;
if(DblStackEmpty(S))
return OVERFLOW;
switch(i)
{
case 0:{
if(S.top[0]==-1)
return FALSE;
e=S.V[S.top[0]--];
return OK;
}
case 1:{
if(S.top[1]==S.m)
return FALSE;
e=S.V[S.top[1]++];
return OK;
}
}
}
Status DestroyStack(DblStack &S){
if(S.V)
{
delete S.V;
S.m=0;
S.bot[0]=S.bot[1]=S.top[0]=S.top[1]=0;
S.V=NULL;
S.m=0;
}
return OK;
}
int main(){
DblStack S;
int i;
int e;
int flag=1;
int len;
cout<<"请输入要创建双栈的长度:";
cin>>len;
if(InitDblStack(S,len))
cout<<"双栈创建成功!"<<endl;
cout<<"长度:"<<S.m<<" "<<len<<endl;
while(flag){
cout<<"输入要插入的栈(0/1)和要插入的元素e:";
cin>>i>>e;
switch(Push(S,i,e)){
case -1:{
cout<<"输入栈的下表有误!"<<endl;
break;
}
case -2:{
cout<<"栈满,无法继续插入\n";
flag=0;
break;
}
case 1:{
cout<<"插入成功!"<<endl;
break;
}
}
if(flag){
cout<<"是否(1/0)继续插入元素:";
cin>>flag;
}
}
flag=1;
cout<<"\n出栈!"<<endl;
while(flag){
cout<<"输入要出哪个栈(0/1):";
cin>>i;
switch(Pop(S,i,e)){
case -1:{
cout<<"输入栈的下表有误!"<<endl;
break;
}
case 0:{
cout<<"\n此栈以空,无法继续出栈。另一栈还可以出栈哦!\n";
break;
}
case 1:{
cout<<"出栈成功!出栈元素:"<<e<<endl;
break;
}
case -2:{
cout<<"栈已全空,无法继续出栈!"<<endl;
flag=0;
break;
}
}
if(flag){
cout<<"是否(1/0)继续出栈:";
cin>>flag;
}
}
DestroyStack(S);
}