5 用兩個棧實現佇列

2021-10-03 00:21:19 字數 993 閱讀 4661

題目鏈結

題目描述

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。

棧通過輔助棧反轉就能形成乙個佇列。stack1作為主棧,stack2作為輔助棧,使用2個棧實現佇列的核心概念是:每次操作前都要保證具有佇列的特點,這樣每次操作時將stack1元素全部轉移到stack2中,新元素壓入棧底,再將stack2中元素返回stack1中。

push演算法:時間複雜度o(n)。

pop演算法:時間複雜度o(1)。

class solution

stack1.

push

(node)

;while

(!stack2.

empty()

)}intpop()

private:

stack<

int> stack1;

stack<

int> stack2;

};

你會發現上一種演算法有個問題就是每次入棧時,就要將棧反轉一次,這是很多餘的操作。如果我們在pop時再反轉,反轉的次數就會少很多,也就優化了很多。

當插入時,直接插入 stack1

當彈出時,當 stack2 不為空,彈出 stack2 棧頂元素,如果 stack2 為空,將 stack1 中的全部數逐個出棧入棧 stack2,再彈出 stack2 棧頂元素。

push演算法:時間複雜度o(1)。

pop演算法:時間複雜度o(n)。

class solution

intpop()

}int tmp = stack2.

top();

stack2.

pop();

return tmp;

}private:

stack<

int> stack1;

stack<

int> stack2;

};

5 用兩個棧實現佇列

用兩個棧實現佇列 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。劍指offer上解題思路很清晰,看一遍解題思路基本上就可以敲出來了。class solution int pop if stack2.empty int ret stack2.top stack2.p...

5 用兩個棧實現佇列

題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。時間限制 1秒 空間限制 32768k 看了一下,推薦的方法和我的思路相近。概念 思路 第乙個棧作為儲存資料用的容器,第二個棧在彈出時作為將資料顛倒的容器,倒過來彈出後,再將剩餘的資料壓入第乙個棧。class...

5 用兩個棧實現佇列

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別 由於佇列是先進先出的,而棧是先進後出的,所以要用2個棧來實現佇列的入隊出隊功能,佇列的入隊功能與棧的一樣,出隊時,先將第乙個棧中的元素全部彈出,並倒入到第二個棧中,將第二個棧中棧頂元素彈出,並將stack2中剩下的元素...