设有两个栈s1,s2都采用顺序栈,并且共享一个存储区[0…maxsize-1].
试设计共享栈是s1,s2以及有关入栈和出栈操作的算法,假设栈中元素为int型,奇数入s1,偶数入s2。
#include<stdio.h>
#define MAXSIZE 3
typedef struct ShareStack{
int data[MAXSIZE];
int top1=-1;
int top2=MAXSIZE;
}ShareStack;
int count=0;
bool Push(ShareStack &S,int flag,int x){//flag=1代表入栈1,2代表入栈2
if(S.top1+1==S.top2) {
printf("栈满\n");
return false;
}else{
if(flag==1){
S.data[++S.top1]=x;
printf("入栈成功\n");
count++;
return true;
}else if(flag==2){
S.data[--S.top2]=x;
printf("入栈成功\n");
count++;
return true;
}
}
}
bool Pop(ShareStack &S,int flag,int x){//flag=1代表入栈1,2代表入栈2
if((S.top1==-1&&flag==1)||(S.top2==MAXSIZE&&flag==2)){
printf("栈空\n");
return false;
}else{
if(flag==1){
x=S.data[S.top1--];
printf("出栈成功\n");
count--;
return true;
}else if(flag==2){
x=S.data[S.top2++];
printf("出栈成功\n");
count--;
return true;
}
}
}
int main(){
ShareStack S;
int PushPop;
while(count<=MAXSIZE){
printf("请选择0入or1出栈:");
scanf("%d",&PushPop);
if(PushPop==0){
int x;
printf("请输入一个数入栈:");
scanf("%d",&x);
if(x%2==0){//偶数入栈1
Push(S,1,x);
}else if(x%2==1){//奇数入栈2
Push(S,2,x);
}
}else if(PushPop==1){
int y,e;
printf("请选择要出栈的栈栈号:");
scanf("%d",&y);
if(y==1){
Pop(S,1,e);
}else if(y==2){
Pop(S,2,e);
}
}
}
return 0;
}