看到這個問題,我現在的想到的解決方案是:
二個佇列中,始終有乙個佇列(佇列1)為空,另乙個佇列(佇列2)為棧中的元素,入棧的操作就直接將元素放入佇列2(所以棧滿的條件就是佇列2滿),出棧時將佇列2的元素依次出隊並向佇列1入隊,直到佇列2的最後乙個元素,也就是棧頂的元素出棧。。。。此時佇列1和佇列2的次序和作用發生了乙個翻轉。。。。
要處理的細節情況還是比較多
比如push的時候,要處理最開始二個佇列都為空的情況
核心**:
struct stack
;int initstack(struct stack* &s)
int isstackempty(struct stack *s)
int isstackfull(struct stack *s)
int push(struct stack *s,int e)
if(isqueueempty(s->q1) && !isqueueempty(s->q2))
if(!isqueueempty(s->q1) && isqueueempty(s->q2))
else
return -1;
}int copyqueue_until_onlyone(struct queue *srcq,struct queue *destq) //將乙個佇列srcq(非空)拷貝到乙個空的佇列destq,最後乙個元素不copy而是作為返回值
enqueue(destq,e);}}
int pop(struct stack *s,int &e)
if(!isqueueempty(s->q1) && isqueueempty(s->q2))
else
return -1;
}over!!!
劍指offer之 用兩個棧實現佇列
用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。棧佇列 存入資料時,先將stack1清空並將資料儲存到stack2中,插入新資料到stack1中,再次將stack2清空至stack1中 刪除資料時,直接輸出stack1的top元素 class solution st...
面試題之 用兩個棧實現佇列
題目很簡單,與之相似的還有用兩個佇列實現棧,思路類似都是用乙個村乙個倒,類似負負得正嘛。具體分析一下兩個棧實現佇列,設這兩個分別為s1和s2,我們從入隊開始,最開始只要直接壓倒s1中,然後出隊,此事要先將元素全部彈到出再放到s2中 現在的問題是當兩個棧都有東西的時候要怎麼處理,其實分析一下我們發現s...
C C 之用兩個棧實現乙個佇列的功能
問題 有兩個棧s1和s2,實現佇列的push和pop功能。一般思路 始終維護s1作為儲存空間,並以s2作為臨時緩衝區。s1實現入隊操作,s2實現出隊操作。1,入隊時,將元素壓入s1。2,出隊時,將s1的元素逐個 倒入 彈出並壓入 s2,將s2的頂元素作為出隊元素,之後再將s2剩下的元素逐個 倒回 s...