棧和佇列的互相實現 以及帶有GetMin的棧

2021-08-17 05:15:54 字數 817 閱讀 1157

兩個棧實現乙個佇列:

基本思路:

1. 建立兩個棧a,b,a棧用來入棧,b棧用來出棧;

2. 入佇列操作:a)a棧未滿,直接入棧; b)a棧已滿,b棧為空,將a棧中的元素全部出棧併入到b棧;c)a棧已滿,b棧不為空,a棧擴容。

3. 出佇列操作:a)b棧為空,a棧也為空,丟擲異常「隊列為空」;b)b棧為空,a棧不為空,將a棧中的元素全部入棧到b棧,然後b棧進行出棧操作;c)b棧不為空,直接出棧。

(把握棧和佇列的區別:棧是先進後出,佇列是先進先出)

兩個佇列實現乙個棧:

基本思路:

1. 兩個佇列a,b。

2. 入棧操作:a)兩個佇列均為空,則選擇a隊列入佇列;b)選擇其中不為空的佇列進行入佇列操作。

3. 出棧操作:a)兩個佇列均為空,則丟擲異常「棧為空」;b)將不為空的佇列中的元素除最後乙個元素外全部出佇列,進入另乙個空佇列,然後剩下的最後的乙個元素出佇列。

在出棧和入棧操作中,始終保證了有乙個空佇列。

實現乙個帶有getmin的棧:

基本思路:

1. 用兩個棧實現,棧data和min;

2. 入棧操作:a)data棧為空,直接將該資料壓入到棧data和棧min;b)data棧不為空,定義臨時變數temp,temp等於待入棧的資料與data棧頂元素中較小的元素值,然後將棧待入棧資料壓入data棧,temp元素壓入min棧。

3. 出棧操作:a)data棧為空,丟擲異常「棧為空」;b)不為空,data棧出棧操作,min棧出棧操作。

4. getmin:a)data棧為空,丟擲異常「棧為空」;b)不為空,返回min棧的棧頂個元素。

c語言棧的實現以及操作

此文章包含了棧的結構體實現,單資料型別實現,以及清空,判空,入棧,出棧,求棧頂元素的實現 棧作為乙個最簡單的資料結構,實現起來也非常容易,想想現在有一摞盤子,每次只能取走或放乙個盤子且只能最上面進行操作 那麼我們如果有乙個索引top時刻指向最上面的那個盤子,棧不就實現了麼?第一段是單資料型別的 in...

棧和佇列的概念 方法以及實現

棧 一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行資料插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的資料元素遵守後進先出lifo last in first out 的原則。壓棧 棧的插入操作叫做進棧 壓棧 入棧,入資料在棧頂。出棧 棧的刪除操作叫做出棧。出資料也在棧頂。棧...

佇列鍊錶實現以及有序表的合併

include include using namespace std typedef struct nodelnode,linklist void creat linklist l void insert linklist l,int n cout 建立結束 void pop linklist l...