【例】为了充分利用空间,顺序栈s0、s1共享一个存储区elem[0,…,maxSize-1]。试设计共享栈s0、s1以及有关入栈和出栈操作的算法,假设栈中元素为int型。
/*
关键点:入栈,判断由s0、s1组成的共享栈是否为满
出栈,判断要将要入的栈是否有元素
*/
typedef struct{
int data[maxSize]; //maxSize 为已经定义的常量
int top[2]; //其中 top[0]为s0的栈顶,top[1]为s1的栈顶
}SqStack;
/* 入栈操作 */
int push(SqStack &st,int stnum,int x){ //stnum 为栈的编号,即要入s0 或 s1
if(st.top[0]+1==st.top[1])
return 0; //栈满,不可添加元素
if(stunm==0){
st.data[++st.top[0]] =x;
return 1;
}else if(stunm==1){
st.data[--st.top[1]] =x;
return 1;
}
else
return -1; //输入的编号不对,不是 0 或 1
}
/* 出栈操作 */
int pop(SqStack &st,int stnum,int &x){ //stnum 为栈的编号,即要入s0 或 s1
if(stunm==0){
if(st.top[0]==-1)
return 0; //s0 为空栈
x=st.data[st.top[0]]--;
return 1;
}else if(stunm==1){
if(st.top[1]==maxSize)
return 0; //s1 为空栈
x=st.data[st.top[1]]++;
return 1;
}
else
return -1; //输入的编号不对,不是 0 或 1
}