本篇部落格主要闡釋內容:
面試題: 使用兩個佇列模擬實現乙個棧
#include
#include
//用兩個佇列實現乙個棧
//這道題的目的在於讓我們利用佇列先進先出的原則實現棧「後進先出」的原則;
//所以這裡只模仿實現 push,pop,和top三個操作;
怎麼倒?
假設先放一組元素到佇列q1;
q1: 1,2,3,4; //1 是隊頭
q2: //現在是空的!
接著需要執行pop操作,本著後進先出的原則,肯定是要把 4 pop掉;可是佇列裡的pop是每次刪除乙個隊頭元素
所以,q2就派上用場了,我們利用q2.push(q1.front())和q1.pop()互動操作把1,2,3放到q2中去;則:
q1;4;
q2;1,2,3;
這下可以pop掉4了,執行一次q1.pop();4就被刪除了,此時
q1: //空;
q2:1,2,3;
假設現在要執行push操作,我們看,這裡q1是空的,那我們是不是可以直接把新元素 5 插在佇列q2中:這樣的話pop的時候判斷一下如果q1為空且q2不為空直接q2.pop()是不是就好了;
但是如果q1不為空,如
q1;4;
q2;1,2,3;
那就直接放如q1,要不然順序就亂了;
現在就剩top了,這個就很簡單了,如果q1不為null直接呼叫q1.back就拿到了最後乙個元素,如果q1是空的
,且q2不為空,則直接q2.back(); 也就拿到了, 我在這裡都忽略了兩個都為空時pop和top的情況!
按照上面的思路就可以實現下面的**!
*/
using
namespace
std;
template
class stack
void pop()
q2.pop ();
}else
q1.pop ();}}
}t& top()
else
if(q2.size () > 0)
}private:
//兩個佇列成員
queue
q1;queue
q2;};void test()
面試題(兩個棧實現乙個佇列和兩個佇列實現乙個棧)
面試題 判斷元素出棧入棧順序的合法性。面試題 實現乙個棧,要求實現push 出棧 pop 入棧 min 返回最小值的操作 的時間複雜度為o 1 我們知道棧是後進先出的,而佇列是先進先出的 我們建立兩個棧input 輸入棧 output 輸出棧 我們用input 輸入棧 來負責入隊,而output 輸...
面試題 用兩個佇列實現乙個棧
在做這道題之前,我們首先要搞清楚佇列和棧的特點。佇列 先進先出,即插入資料在隊尾進行,刪除資料在隊頭進行 棧 後進先出,即插入與刪除資料均在棧頂進行。pop 如果我們要實現乙個棧,我們先進入的資料一定是先出去的,怎麼樣利用佇列實現這個特點呢?我們可以利用兩個佇列來進行資料順序的調整。當我們需要刪除資...
C 面試題 兩個佇列實現乙個棧
佇列的特點是 先進先出 而棧的特點是 先入後出 方案一 我們用乙個佇列作為主要維護棧的佇列,該佇列用來插入元素和彈出元素。插入元素時,將元素直接插入到第乙個佇列的尾部。彈出元素時 1 將第乙個佇列的除隊尾元素以外的所有元素依次彈出並且插入到第二個佇列中 2 將第乙個佇列中剩下的那個元素彈出 3 將第...