使用两个栈来模拟队列,依次进入一个栈,然后出栈进入另一个栈,这样队首元素就放到了栈顶,再依次出栈完成了先进先出。
int enqueue(Stack &S1,&S2,int x){
if(!StackOverflow(S1)){
push(S1,x);
return 1;
}
if(StackOverflow(S1)&&!StackEmpty(S2)){
printf("Stack overflow\n");
return 0;
}
if(StackOverflow(S1)&&StackEmpty(S2)){
while(!StackEmpty(S1){
pop(S1,x);
push(S2,x);
}
}
push(S1,x);
return 1;
}
void dequeue(Stack &S1,&S2,int &x){
if(!StackEmpty(S2)){
pop(S2,x);
}
else if(StackEmpty(S1)){
printf("Queue is empty\n");
}
else{
while(!StackEmpty(S1)){
pop(S1,x);
push(S2,x);
}
pop(S2,x);
}
}
int QueueEmpty(Stack S1,Stack S2){
if(StackEmpty(S1)&&StackEmpty(S2))
return 1;
else
return 0;
}