劍指offer 面試題9 用兩個棧去實現佇列

2021-08-20 22:51:56 字數 575 閱讀 7461

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

思路:由於棧是後入先出,佇列是先入先出。實現時,輸入元素時,將元素壓入stack1中,刪除元素時,先將stack1中的元素出棧,全部壓入stack2中再出棧,這樣元素的位置將倒置,實現先入先出的功能。

操作:入隊:將元素進棧1

出隊:判斷棧2是否為空,如果為空,則將棧1中所有元素pop,並push進棧2,棧2出棧;如果不為空,棧2直接出棧。

class solution

int pop()

}int a=stack2.top();

stack2.pop();

return a;

}private:

stackstack1;

stackstack2;

};

用兩個佇列實現乙個棧

思路:入棧:將元素進佇列a

出棧:判斷佇列a中元素的個數是否為1,如果等於1,則出佇列,否則將佇列a中的元素出佇列並放入佇列b,直到佇列a中的元素留下乙個,然後佇列a出佇列,再把佇列b中的元素出佇列以此放入佇列a中。

劍指Offer 面試題9用兩個棧實現佇列

思路 stack1存放著逆序的剩餘佇列,stack2存放著正序的佇列。pop的時候,當stack2為空,表示序列都在stack1中,則從stack1中迴圈pop後push到stack2,再從stack2中pop出隊首 stack2不為空則直接pop。push的時候,當stack2不為空,把資料從st...

劍指offer 面試題9 用兩個棧實現佇列

棧後進先出,佇列先進先出。1.當stack2不為空時,stack2中的棧頂元素是最先進入佇列的元素,可以彈出。2.當stack2為空時,把stack1中的元素逐個彈入並壓入stack2中,先入stack1的元素這時在stack2頂部,這時彈出stack2就完成了佇列 書上的圖更便於理解 class ...

劍指offer面試題9 用兩個棧實現佇列

templateclass cqueue 佇列是先進先出,棧是先進後出。這題題目給出了兩個棧,首先假設我們往乙個棧裡面壓入了三個元素a b c。作為乙個佇列,如果我們壓入了a b c,那麼先出的會是a。但是棧彈出的會是c,那麼該怎麼輸出a呢,這裡注意到我們利用了乙個棧,還有乙個棧沒有使用,如果我們把...