如何用兩個棧實現乙個佇列以及用兩個佇列實現乙個棧

2022-02-26 12:05:59 字數 1329 閱讀 3728

一、兩個棧實現乙個佇列

設兩個棧分別為stack1和stack2,stack1主要負責「進入」,模擬的是「隊尾」;stack2主要負責「彈出」,模擬的是「隊頭」。具體思路如下:

1、對於「資料入隊」操作,只需要將資料壓入stack1即可

2、對於「資料出隊」操作,若stack2非空,直接彈出棧頂元素;若stack2是空,將stack1中所有元素彈入stack2之後,彈出stack2棧頂元素

實現**如下:

1

class

solution27

8int

pop() 18}

19 a =stack2.top();

20stack2.pop();

21return

a;22}23

24private

:25 stackstack1;

26 stackstack2;

27 };

view code

二、兩個佇列實現乙個棧

設兩個佇列分別為queue1和queue2,用佇列模擬棧需要注意——任何時候至少有乙個佇列要是空的,我們的插入操作所做的事情就是每次只往空的佇列中插入資料,然後把另乙個佇列中的資料移到該佇列,如此一來永遠保持最後插入的元素在某個佇列的「隊頭」,一旦有彈出操作,先彈出它,滿足棧的「後進先出」原則,完成了兩個佇列對乙個棧的模擬。

1、「插入操作」  將資料插入到空的佇列中,然後把另乙個佇列中的元素全部移到該佇列

2、「刪除操作」 將非空佇列的隊頭資料刪除即可

3、「彈出操作」 彈出非空佇列隊首元素

4、「判空操作」 兩個佇列均為空才判空

**如下:

1

class

stack 13}

14else

1522}23

}2425//

removes the element on top of the stack.

26void

pop()

3233

//get the top element.

34int

top()

3839

//return whether the stack is empty.

40bool

empty()

4344

private

:45 queueq1, q2;

46 };

view code

如何用兩個棧實現乙個佇列

問題 如何用兩個棧實現乙個對列的功能?思路 從棧a入佇列,從棧b出佇列。佇列的2個最重要的操作,入佇列,出佇列。入佇列 從棧a入佇列。出佇列 分兩種情況 如果棧b不為空,直接彈出。如果棧b為空,將棧a中的資料全部彈入棧b中,再從棧b彈出資料 實現如下 queuebystack.cpp 定義控制台應用...

用兩個棧實現乙個佇列 用兩個佇列實現乙個棧

做題之前,我們先來回顧一下 棧和佇列的相同點以及不同點 便於做題時的應用!1.區別與聯絡 相同點 1 棧和佇列都是控制訪問點的線性表 2 棧和佇列都是允許在端點處進行資料的插入和刪除的資料結構 不同點 1 棧遵循 後進先出 lifo 的原則,即只能在該線性表的一頭進行資料的插入和刪除,該位置稱為 棧...

用兩個棧實現乙個佇列,用兩個佇列實現乙個棧

t deletehead 頭部刪除節點 while s1.empty t ret s2.top s2.pop return ret private stacks1 stacks2 問題2 用兩個佇列實現乙個棧 問題分析 用兩個佇列實現乙個棧,刪除時,由於佇列是先進先出的,而棧是後進先出,因此假設現在...