上篇文章寫了用兩個棧實現乙個佇列,這篇文章實現用兩個佇列實現乙個棧,其實兩者的思想都是差不多的。
下邊繼續畫圖說明:
下邊給出實現**:
#includetemplateclass stack
else if (!_q1.empty())//q1不空就push進q1
//q1空,q2不空(直接放入q1,這樣pop的話可能更方便一些),要是之後還需要push就不方便了
else//q2不空,push進q2
}t pop()
if (!_q1.empty())
t ret = _q1.front();
_q1.pop();
return ret;
} if (!_q2.empty())
t ret = _q2.front();
_q2.pop();
return ret;
} }private:
queue_q1;
queue_q2;
};void test()
int main()
通過上邊的**,我們可以看出,這段**的實現方法是裡的方法2,即就是,每次push進不空的佇列,pop時
將空佇列當做輔助隊來實現,這樣的方法較中給出的方法1更有效一些。
上邊程式的輸出結果 7 6 5 4 1(兩個 數字之間回車隔開),這樣實現了先進後出。
對於中的方法1,這裡就不給出**了,有興趣可以自己實現。~~~
面試題 兩個佇列實現棧
兩個佇列實現棧 前提已知 typedef struct queue queue void initqueue queue q void enqueue queue q,int key int dequeue queue q int sizeofqueue queue q int isqueueemp...
資料結構之棧和佇列面試題(3)兩個佇列實現乙個棧
我們知道佇列是先進先出,而棧是後進先出的,所以要拿兩個佇列來實現乙個棧,我們思路就應該這樣 每次總保持乙個隊列為空,對另乙個佇列進行操作。入棧操作時,我們在那個有元素的佇列後面直接用入佇列操作,就相當於是棧的入棧操作。在進行出棧操作的時候,我們將有元素的佇列裡面的元素依次出佇列,並且入佇列另乙個佇列...
資料結構之棧和佇列面試題(2)兩個棧實現乙個佇列
我們怎麼用兩個棧來實現乙個佇列呢?首先我們都知道,棧和佇列的 出棧和出佇列是不一樣的,棧是後入先出,佇列是先入先出。所以我們的思路是,用兩個棧,乙個input,乙個output,我們每次想入棧的時候就先將output裡面的元素依次出棧然後往input裡面依次入棧,這個時候,input棧頂元素就是最後...