面試題8 用兩個棧實現乙個佇列

2021-07-08 19:44:01 字數 697 閱讀 5886

templateclass cqueue;
解答:

這題仔細分析下,應該可以做出來。有兩個棧stack1和stack2。

那麼,如果stack2為空,我們將stack1(出佇列逆序)的數壓入到stack2(出佇列順序),在對stack2進行出棧。

如果stack2非空,直接出棧。

實現如下:

#include #include #include #include using namespace std;

templateclass cqueue

~cqueue(void){}

t deletehead();

private:

stackstack1;

stackstack2;

};templatet cqueue::deletehead()

} t temp = stack2.top();

stack2.pop();

return temp;

}int main()

思考:用兩個佇列實現乙個棧。

和上面思路差不多,每次進棧時,兩個佇列中有乙個為空,於是,將進棧元素新增到非空的那個佇列(如果兩個為空,則任選乙個),出棧時,將非空的那個佇列的前n-1個元素加入到為空的那個佇列,最後乙個元素出佇列即為出棧。

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

在做這道題之前,我們首先要搞清楚佇列和棧的特點。佇列 先進先出,即插入資料在隊尾進行,刪除資料在隊頭進行 棧 後進先出,即插入與刪除資料均在棧頂進行。pop 如果我們要實現乙個棧,我們先進入的資料一定是先出去的,怎麼樣利用佇列實現這個特點呢?我們可以利用兩個佇列來進行資料順序的調整。當我們需要刪除資...

面試題07 用兩個棧實現乙個佇列

題目描述 用兩個棧實現乙個佇列。分別完成在佇列尾部插入結點和在佇列頭部刪除結點的功能。基本知識 1 佇列的操作 offer 隊尾插入元素,插入失敗返回false。poll 隊頭取出元素 linkedlist類實現了queue介面,因此我們可以把linkedlist當成queue來用。2 實現棧的操作...

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

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