資料結構 棧面試題 兩個佇列實現乙個棧

2021-07-22 23:11:17 字數 833 閱讀 1507

上篇文章寫了用兩個棧實現乙個佇列,這篇文章實現用兩個佇列實現乙個棧,其實兩者的思想都是差不多的。

下邊繼續畫圖說明:

下邊給出實現**:

#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棧頂元素就是最後...