面試題 兩個佇列實現棧

2021-07-29 10:50:52 字數 1190 閱讀 9019

兩個佇列實現棧

//

前提已知

typedef struct

queue

queue;

void initqueue(queue *q);

void enqueue(queue *q, int

key);

int dequeue(queue *q);

int sizeofqueue(queue *q);

int isqueueempty(queue *q);

int isqueuefull(queue *q);

實現一 思路

q1是專職進出棧的,q2只是個中轉站 圖示

參考**

void push(queue *q1, queue *q2, int

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

else

tmp =dequeue(q1);

while(isqueueempty(q2) == 0

)

return

tmp;}}

實現二思路

q1是專職進出棧的,q2只是個中轉站。元素集中存放在乙個棧中,但不是指定(q1 或 q2)。

定義兩個指標:pushtmp:指向專門進棧的佇列q1; tmp:指向臨時作為中轉站的另乙個棧q2 比較

實現二,出棧後就不用轉移回原來的棧了(圖示最後一步),這樣減少了轉移的次數。

參考**

void push(queue *q1, queue *q2, int

k)

else

enqueue(pushtmp, k);

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

else

if(isqueueempty(pushtmp))

else

tmpvalue =dequeue(pushtmp);

return

tmpvalue;}}

面試題7 兩個棧實現佇列

已知下面stack類及其3個方法push pop和 count,請用2個stack實現queue類的入隊 enqueue 出隊 dequeue 方法。class stack class queue 這道題應該不算難,比起 程式設計之美 中微軟那些什麼 翻烙餅 的面試題,難度上差遠了。況且,由於時間關...

面試題之 用兩個棧實現佇列

題目很簡單,與之相似的還有用兩個佇列實現棧,思路類似都是用乙個村乙個倒,類似負負得正嘛。具體分析一下兩個棧實現佇列,設這兩個分別為s1和s2,我們從入隊開始,最開始只要直接壓倒s1中,然後出隊,此事要先將元素全部彈到出再放到s2中 現在的問題是當兩個棧都有東西的時候要怎麼處理,其實分析一下我們發現s...

面試題 4 用兩個棧實現佇列 用兩個佇列實現棧

首先,我們知道 棧 是先進後出的,佇列 是先進先出的。我們先在 stack1 中插入 a b c d 四個字母。此時,我們如果要做出隊操作的話,a 應該首先被 pop 出來,那麼我們想到,把 stack1 中的所有數 先 pop 出來,那麼 a 就可以出隊了。這時,我們可以利用 stack2 我們將...