兩個佇列實現棧
//實現一 思路前提已知
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, intk)
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 我們將...