這個系列是我在牛客網上刷《劍指offer》的刷題筆記,旨在提公升下自己的演算法能力。
檢視完整的劍指offer演算法題解析:劍指offer完整習題解析
用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。
佇列是先進先出,棧是先進後出,如何用兩個棧來實現這種先進先出呢?
其實很簡單,我們假設用stack1專門來裝元素,那麼直接stack1.pop肯定是不行的,這個時候stack2就要發揮作用了。
我們的規則是:當stack2中不為空時,在stack2中的棧頂元素是最先進入佇列的元素,可以彈出。如果stack2為空時,我們把stack1中的元素逐個彈出並壓入stack2。由於先進入佇列的元素被壓倒stack1的棧底,經過彈出和壓入之後就處於stack2的棧頂,有可以直接彈出。如果有新元素d插入,我們直接把它壓入stack1即可。
這樣就能保證每次stack2中pop出來的元素是最老的元素了
示意圖:
**實現:
# -*- coding:utf-8 -*-
class
solution
:def
__init__
(self)
: self.stack1 =
self.stack2 =
defpush
(self, node)
:def
pop(self):if
len(self.stack2)==0
:while self.stack1:))
return self.stack2.pop(
)
劍指offer 五 用兩個棧實現佇列
題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。思路 棧是先進後出 要實現的是在隊尾插入節點 在隊首刪除節點 首先呢,可以拿乙個例子來看,首先通過乙個例子來分析,比如插入乙個元素a,可以先將它插入到棧1之中。棧1中目前的元素為,棧2為空。再壓入兩個元素b,...
劍指offer 用兩個棧實現佇列
華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 9 30 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解析 我的思路是用乙個棧來儲存資料,入隊的話直接在這個棧上入棧,出隊的話借助輔助棧,對輔助棧入棧,然後取出頭元素,然後把輔助棧上的元素在...
用兩個棧實現佇列《劍指offer
題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解題思路 將元素入隊時壓入乙個棧中,隨後通過另乙個棧出隊 1 使用stack容器定義兩個棧 stack stack1 stack stack2 2 入隊 stack1.push node node為入隊元素 ...