请利用两个栈S1和S2来模拟一个队列。已知栈的三个运算定义如下:PUSH(ST,x):元素x入ST栈;POP(ST,x):ST栈顶元素出栈,赋给 变量x;Sempty(ST):判ST栈是否为空。那么如何利用栈的运算来实现该队列的三个运算:enqueue:插入一个元素入队列; dequeue:删除一个元素出队列;queue_empty:判队列为空。(请写明算法的思想及必要的注释)【上海交通大学1999 二(12分)】
原来就想过模拟问题,不过一直都以为是一个堆栈,现在两个就好做了
enqueue(x){
PUSH(S1,x);
}
dequeue(){
if(!Sempty(s2))
{ POP(S2,x);
return x;}
else
{
while(!Sempty(S1)){
POS(S1,x);
PUSH(S2,x);
}
if(Sempty(S2) return null;
else {
POP(S2,x);
return x;
}
}
}
queue_empty(){
return Sempty(S1)||Sempty(S2);
}
原来就想过模拟问题,不过一直都以为是一个堆栈,现在两个就好做了
enqueue(x){
PUSH(S1,x);
}
dequeue(){
if(!Sempty(s2))
{ POP(S2,x);
return x;}
else
{
while(!Sempty(S1)){
POS(S1,x);
PUSH(S2,x);
}
if(Sempty(S2) return null;
else {
POP(S2,x);
return x;
}
}
}
queue_empty(){
return Sempty(S1)||Sempty(S2);
}