思路
分为栈s1和s2,每次入队前,先检查s1是否满了,满了还得保证s2为空,这样才能全部放入s2中再入栈。每次出队前,检查s2是否为空,若空,则从s1全部放入,再出栈。队满的情况就是s1和s2都满了,队空的情况就是s1和s2都空了。
代码
int EnQueue(Stack &S1,Stack &S2,ElemType e){
ElemType x;
if(!StackOverflow(S1)){
Push(S1,e);
return 1;
}
if(StackOverflow(S1)&&StackOverflow(S2)){
return 0;
}
if(StackOverflow(S1)&&!StackOverflow(S2)){
while(!StackEmpty(S1)){
Pop(S1,x);
Push(S2,x);
}
Push(S1,e);
return 1;
}
}
void DeQueue(Stack &S1,Stack &S2,ElemType &e){
ElemType x;
if(!StackEmpty(S2)){
Pop(S2,e);
}else if(StackEmpty(S2)&&!StackEmpty(S1)){
while(!StackEmpty(S1)){
Pop(S1,x);
Push(S2,x);
}
Pop(S2,e);
}else return ;
}