劍指Offer(五) 用兩個棧實現佇列

2021-09-24 19:07:48 字數 931 閱讀 8430

這個系列是我在牛客網上刷《劍指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為入隊元素 ...