劍指offer 用兩個棧實現佇列

2021-10-06 01:39:09 字數 859 閱讀 2119

題目

示例 1:

示例 2:

輸入:

思路1本題最基本的思路是乙個棧s1用來儲存資料,另乙個棧s2用來倒騰資料。

在入隊時,首先將s1中的資料倒入s2中,將新來的資料插入加到s2,再把s2中的資料倒入s1中。這樣新加進來的資料就進入了棧底,出隊只需要彈出棧頂的資料即可。

**

class

cqueue

void

(int value)

s2.push

(value)

;while

(!s2.

empty()

)}intdeletehead()

};

思路2

由於每一次入隊都要再兩個棧之間來回倒騰,所以這種方法的效率非常低。

另一種思路是,設定兩個棧,其中instack只用來入隊,popstack只用來出隊。入隊時,直接將新來的資料壓入到instack即可;出隊時,如果popstack為空,就將instack中所有的資料都倒入popstack中,再從popstack棧頂彈出資料,如果popstack非空,直接從popstack棧頂彈出資料即可。由此可以看到,對於連續入隊之後再出隊的情況,本方法要比上一種方法效率高很多。

**

class

cqueue

void

(int

value

)int

deletehead()

}int ret=popstack.

top();

popstack.

pop();

size--

;return ret;}}

;

劍指offer 用兩個棧實現佇列

華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 9 30 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解析 我的思路是用乙個棧來儲存資料,入隊的話直接在這個棧上入棧,出隊的話借助輔助棧,對輔助棧入棧,然後取出頭元素,然後把輔助棧上的元素在...

用兩個棧實現佇列《劍指offer

題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解題思路 將元素入隊時壓入乙個棧中,隨後通過另乙個棧出隊 1 使用stack容器定義兩個棧 stack stack1 stack stack2 2 入隊 stack1.push node node為入隊元素 ...

劍指offer 用兩個棧實現佇列

記錄 劍指offer 上的演算法題。題目描述如下 佇列的宣告如下 template class cqueue cqueue t deletehead bool empty private stack stack1 stack stack2 實現的 如下 templatet stack1.push n...