詳解兩個佇列實現一個棧(python實現——經典面試題)
阿新 • • 發佈:2018-11-10
1、任務詳解
使用兩個佇列資料結構實現一個棧,要求實現棧的出棧和進棧操作。
2、解題思路
push()操作:
為了保證先進棧的元素一直在棧底,需要將兩個佇列交替使用,才能滿足需求。因此,想法是,我們只在空的那個佇列上新增元素,然後把非空的那個佇列中的元素全部追加到當前這個佇列。這樣一來,我們又得到一個空的佇列,供下一次新增元素。
pop()操作:
因為在新增元素時,我們已經按照進棧的先後順序把後進棧的元素放在一個佇列的頭部,所以出棧操作時,我們只需要找到那個非空的佇列,並依次取出資料即可。
3、程式碼如下
class StackWithTwoQueues(object): def __init__(self): self._queue1 = [] self._queue2 = [] def push(self,x): if len(self._queue1) == 0: self._queue1.append(x) elif len(self._queue2) == 0: self._queue2.append(x) if len(self._queue2) == 1 and len(self._queue1) >= 1: while self._queue1: self._queue2.append(self._queue1.pop(0)) elif len(self._queue1) == 1 and len(self._queue2) > 1: while self._queue2: self._queue1.append(self._queue2.pop(0)) def pop(self): if self._queue1: return self._queue1.pop(0) elif self._queue2: return self._queue2.pop(0) else: return None def getStack(self): print("queue1",self._queue1) print("queue2", self._queue2) sta = StackWithTwoQueues() sta.push(1) sta.getStack() sta.push(2) sta.getStack() sta.push(3) sta.getStack() sta.push(4) sta.getStack() print(sta.pop()) sta.getStack() print(sta.pop()) sta.getStack() print(sta.pop()) sta.getStack()