引言:在使用顺序栈时因为对栈的空间大小难以准确估计,从而就引起了有的栈的溢出,有的栈空间还很空闲的情况。为了解决这个问题,可以让多个栈共享一个足够大数组空间,通过利用栈的动态特性来使其存储空间互相补充,即多栈共享。
两栈共享的数据结构定义如下:
#define M 100
typedef struct{
int elem[M];
int top[2];//top[0]和topp[1]分别为两个栈顶指示器
}DqStack
初始化:
void InitStack(DqStack){
S->top[0];
S->top[1];
}
双端顺序栈进栈:
int Push(DqStack *S,StackElementType x,int i){
if(S->top[0]+1==S->top[1])return(false);
switch(i){
case 0:S->top[0]++; //0栈
S->elem[S->top[0]]=x;
break;
case 1: //1栈
S->top[1]++;
S->elem[S->top[1]]=x;break;
default:
return False;
}
retuen False;
}
双端顺序栈出栈
int Pop(DeqStack *S,StackElenType *x,int i)
//从i号栈中弹出栈顶元素并传递到x中
{
switch(i){
case 0: //0号栈
if(top[0]==-1)return false;
*x=S->elem[S->top[0]];
S->top[0]--;
case 1: //1号栈
if(top[1]==S)return false;
*x=S->elem[S->top[1]];
S->yop[1]++;
default:
return false;
}
return true;
}