一、兩個棧實現乙個佇列
設兩個棧分別為stack1和stack2,stack1主要負責「進入」,模擬的是「隊尾」;stack2主要負責「彈出」,模擬的是「隊頭」。具體思路如下:
1、對於「資料入隊」操作,只需要將資料壓入stack1即可
2、對於「資料出隊」操作,若stack2非空,直接彈出棧頂元素;若stack2是空,將stack1中所有元素彈入stack2之後,彈出stack2棧頂元素
實現**如下:
1view codeclass
solution27
8int
pop() 18}
19 a =stack2.top();
20stack2.pop();
21return
a;22}23
24private
:25 stackstack1;
26 stackstack2;
27 };
二、兩個佇列實現乙個棧
設兩個佇列分別為queue1和queue2,用佇列模擬棧需要注意——任何時候至少有乙個佇列要是空的,我們的插入操作所做的事情就是每次只往空的佇列中插入資料,然後把另乙個佇列中的資料移到該佇列,如此一來永遠保持最後插入的元素在某個佇列的「隊頭」,一旦有彈出操作,先彈出它,滿足棧的「後進先出」原則,完成了兩個佇列對乙個棧的模擬。
1、「插入操作」 將資料插入到空的佇列中,然後把另乙個佇列中的元素全部移到該佇列
2、「刪除操作」 將非空佇列的隊頭資料刪除即可
3、「彈出操作」 彈出非空佇列隊首元素
4、「判空操作」 兩個佇列均為空才判空
**如下:
1view codeclass
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 };
如何用兩個棧實現乙個佇列
問題 如何用兩個棧實現乙個對列的功能?思路 從棧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 用兩個佇列實現乙個棧 問題分析 用兩個佇列實現乙個棧,刪除時,由於佇列是先進先出的,而棧是後進先出,因此假設現在...