微软,Google面试题 (18) —— 用两个栈实现一个队列

来源:互联网 发布:火爆网络的女神雅典娜 编辑:程序博客网 时间:2024/04/29 22:52

解法:有两个栈A和B。队列的appendTail操作为,将元素push进A。队列的deleteHead操作为:如果B不为空,则pop栈B的栈顶元素。如果B为空,则将A中的元素全部依次pop到B,然后pop栈B的栈顶元素。

扩展问题:如何用两个队列实现一个栈。
解法一:有两个队列C和D。
栈的push操作为:1, 将新元素添加到C的尾端。2, 如果C中只有一个元素,则不做任何工作。如果C中有超过1个元素,那么将队列C除队尾的新元素之外的其他元素依次pop,并且添加到D的尾端。保持C中只有一个元素。
栈的pop操作为:1, 此时C如果不为空,那么C中的元素即为栈顶元素,pop出该元素。2, 将D中的元素依次pop出,并且依次添加到C中。3, 将C中除队尾元素之外的其他元素依次pop出,添加到队列D。保持C中只有一个元素。

原创粉丝点击