詳解兩個棧實現一個佇列(python實現——經典面試題)
阿新 • • 發佈:2018-11-10
1、題目說明
使用兩個棧結構,實現一個佇列功能,實現佇列的新增元素和彈出元素。
注意:
佇列特點是隻能在佇列尾部新增元素,在佇列頭部刪除元素,先進先出(FIFO/LILO)
2、結題思路
兩個棧可以巧妙的結合,第一個棧用來新增元素,而在第二個棧中彈出元素。
我們把所有新增元素的操作放在第一個棧中實現,當需要彈出元素時全部放在第二個棧中實現,當然,還會涉及有時候把第一個棧中的元素轉移到第二個棧中已滿足佇列的邏輯。
3、程式碼實現
class QueueWithTwoStacks(object): def __init__(self): self._stack1 = [] self._stack2 = [] def appendTail(self,x): self._stack1.append(x) def deleteHead(self): if self._stack2: return self._stack2.pop() else: if self._stack1: while self._stack1: self._stack2.append(self._stack1.pop()) return self._stack2.pop() else: return None def getQueue(self): return self._stack1 q = QueueWithTwoStacks() q.appendTail(1) q.appendTail(2) q.appendTail(3) print(q.getQueue()) #q.deleteHead() print(q.deleteHead()) print(q.deleteHead()) print(q.deleteHead())