数据结构(C语言),请救高手,万分感谢.

请利用两个栈S1和S2来模拟一个队列。已知栈的三个运算定义如下: PUSH(ST,x):元素x入ST栈;POP(ST,x):ST栈顶元素出栈,赋给变量x;Sempty(ST):判ST栈是否为空。那么如何利用栈的运算来实现该队列的三个运算:enqueue:插入一个元素入队列; dequeue:删除一个元素出队列;queue_empty:判队列为空。(请写明算法的思想及必要的注释)
提示:
结合栈和队列的思想来完成该题目。
要求:
⑴ 写入栈子函数:PUSH(ST,x)
⑵出栈子函数:POP(ST,x)
⑶ 判断栈空子函数:Sempty(ST)
(4) 入队子函数:enqueue(stack s1,elemtp x)。
(5)出队子函数:dequeue(stack s2, stack s1)
(6) 判断队空子函数:queue_empty(stack s2, stack s1)

第1个回答  2007-06-20
//用在S1中入栈模拟入队动作,简单
enqueue(stack s1,elemtp x)
{
PUSH(s1 , x);
}
//出队比较麻烦,也是此题的难点
dequeue(stack s2, stack s1)
{
while(!Sempty(S1))//把S1中的元素全部导入S2
{
POP(S1,x) ;
PUSH(S2,x);
}
POP(S2,x);//模拟出队
while(!Sempty(S2))//把S2中的元素全部导回S1,以保证入队的顺序
{
POP(S2,x) ;
PUSH(S1,x);
}
}
//模拟队列判空,简单
queue_empty(stack s2, stack s1)
{
if(Sempty(S1))&&Sempty(S2))) return true; //两个栈都为空说明队列为空
}

//具体实现就自己搞定喽本回答被提问者采纳
第2个回答  2007-06-20
我只提供思路,我认为你会写.
⑴ 写入栈子函数:PUSH(ST,x)
⑵出栈子函数:POP(ST,x)
⑶ 判断栈空子函数:Sempty(ST)
以上三个,跟书本教的一样.
(6) 判断队空子函数:queue_empty(stack s2, stack s1)
这个,两个栈都空了,就空了
A元素入队,先将ST1的所有元素弹栈,入ST2,再将元素A入栈ST1,将ST2所有元素弹栈,入ST1

元素出队,将ST1除栈底元素的所有元素弹栈,入ST2,再将元素弹栈,最后将ST2所有元素弹栈,入ST1
这就利用堆栈的FILO实现了队列的FIFO
相似回答