用两个栈实现队列 ( python实现 )
一、题目描述
用两个栈实现一个队列,分别实现在队列尾部插入节点和在队列头部删除节点的功能。
这里,简单的采用列表 (List) 以及其 list.append(),list.pop() 方法模拟栈。当然,在python中,实现一个栈 (Stack) 类,可参考Link。
二、解题思路
暂略。(此处主要作为书中python实现补充)
三、代码实现
用python实现一个stackToQueue类,代码如下。
class stackToQueue(object):
def __init__(self,stack1=[],stack2=[]):
self.stack1 = stack1
self.stack2 = stack2
def appendTail(self,element):
self.stack1.append(element)
def deleteHead(self):
if len(self.stack2) <= 0:
while len(self.stack1):
self.stack2.append(self.stack1.pop())
return self.stack2.pop()
def is_empty(self):
return len(self.stack1) == 0 and len(self.stack2) == 0
初始化一个类STQ,相当于一个Queue,使用插入函数 appendTail() 依次插入 1 2 3 4 5 。
>>> STQ = stackToQueue([],[])
>>> STQ.appendTail(1)
>>> STQ.appendTail(2)
>>> STQ.appendTail(3)
>>> STQ.appendTail(4)
>>> STQ.appendTail(5)
此时,队列中应该是 1 2 3 4 5,若是执行一次 deleteHead(),将删去队列头部元素,那么 1 被删除,剩下 2 3 4 5。
>>> STQ.deleteHead()
Out:
1
再执行一次 deleteHead(),则2被删除,队列中剩下 3 4 5。
>>> STQ.deleteHead()
Out:
2
接下来再次插入两个元素,先插入8,再插入6,此时队列中为3 4 5 8 6。
>>> STQ.appendTail(8)
>>> STQ.appendTail(6)
然后将整个队列全部删除,并依次打印删除元素。
>>> while STQ.si_empty() is not True:
print(STQ.deleteHead())
Out:
3
4
5
8
6