共享栈,将两个栈的栈底设在向量两端,初始时,s1栈顶指针为-1,s2栈顶指针为maxsize(最后一个元素下标为maxsize-1),当栈顶指针相邻时,栈满。
#define maxsize 100
#define elemtp int
typedef struct{
elemtp stack[maxsize];
int top[2];
}stk;
stk s;
//入栈操作
int push(int i,elemtp x){
//i表示栈号,i=0表示左边的s1栈,i=1表示右边的s2栈
if(i<0|| i>1){
printf("栈号不合法\n");
exit(0);
}
if(s.top[1]-s.top[0]==1){
printf("栈已满\n");
return 0;
}
switch(i){
case 0:s.stack[++s.top[0]]=x;return 1;break;
case 1:s.stack[--s.top[1]]=x;return 1;
}
}
//退栈操作
elemtp pop(int i){
if(i<0|| i>1){
printf("栈号不合法\n");
exit(0);
}
if(s.top[i]<0){
printf("栈已空\n");
return 0;
}
switch(i){
case 0:
if(s.top[0]==-1){
printf("栈已空\n");
return -1;
}else
return s.stack[s.top[0]--];
break;
case 1:
if(s.top[1]==maxsize){
printf("栈已空\n");
return -1;
}else
return s.stack[s.top[1]++];
break;
}
}