用兩個佇列實現棧 C語言實現

2021-10-23 01:45:39 字數 1116 閱讀 7636

如何用兩個佇列實現棧?

思路分析:建立佇列

q1,在第佇列中入隊元素1,

2,3,

4。我們知道,佇列是先進先出的,如果出隊的話,得到的元素是

1,而不是

4。而按照棧的要求,出棧的元素應該是4.

那麼怎樣得到佇列的最後乙個元素

4呢?這個時候,就要借助第二個佇列了。建立空佇列

q2,我們可以將佇列的中元素乙個個出隊,然後將出來的元素入隊到佇列

q2中。這樣,分別將1,

2,3從佇列q1

**隊,然**隊佇列

q2。當最後乙個元素4從

q1**隊時,將這個元素返回即可。這樣,一次迴圈下來,1,

2,3元素從

q1到了

q2,佇列最後乙個元素

4被排出,實現了後進先出的操作,相當於棧的

pop操作。 下次

pop的時候,再進行同樣的操作即可,只是這時候元素都移動到

q2中了,我們從

q2中迴圈出隊元素到

q1中即可。

我們試著寫一下**,首先通過陣列實現佇列,定義入隊和出隊的函式:

struct queue ;

void enqueue(struct queue* q, int node)

q->tail = (q->tail + 1) % 20;

q->a[q->tail] = node;

}int dequeue(struct queue* q)

q->head = (q->head + 1) % 20;

return q->a[q->head];

}

接下來就是題目的關鍵,利用兩個佇列,實現棧的pop操作:

int pop(struct queue* q1, struct queue* q2) 

int n = dequeue(q1);

return n;

}

主函式測試一下:

int main()
需要注意的是,在主函式中測試時,pop函式每次呼叫的時候,q1和q2要互換位置,因為每次pop,元素都會從乙個佇列搬到另乙個佇列。

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

劍指offer 面試題7 用兩個棧實現佇列。templateclass cqueue 我們試著用兩個棧來模擬佇列的操作,發現如下可行操作 完整 實現 面試題7 用兩個棧實現佇列 分別完成在隊尾插入結點和在隊頭刪除結點的功能。date 2014 06 27 include include includ...

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

pragma once要在標頭檔案的最開始加入這條雜注,就能夠保證標頭檔案只被編譯一次 pragma once是編譯器相關的,就是說即使這個編譯系統上有效,但在其他編譯系統也不一定可以,不過現在基本上已經是每個編譯器都有這個雜注了。用兩個棧實現佇列 每個模板函式的實現都需要加template模板列表...

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

用兩個棧實現乙個佇列的功能?要求給出演算法和思路 分析 入隊 將元素進棧a 出隊 判斷棧b是否為空,如果為空,則將棧a中所有元素pop,並push進棧b,棧b出棧 如果不為空,棧b直接出棧。用兩個佇列實現乙個棧的功能?要求給出演算法和思路 分析 入棧 將元素進佇列a 出棧 判斷佇列a中元素的個數是否...