面試題 劍指offer07 兩個棧實現乙個佇列

2021-08-02 13:15:07 字數 782 閱讀 3536

我們都知道,棧的順序是現金後出,而佇列的順序是後進先出,用兩個棧實現乙個佇列,演算法的思路如下:

現有兩個佇列q1與q2,入棧:如果q1與q2都為空,那麼我們選擇q1入棧也就是入佇列,比如q1入棧 1 2 3 4 ;現在要出棧,後進先出那麼4要出棧。但是q1是乙個

佇列,先進先出,那麼 1 2 3出佇列 q2 1 2 3 入佇列,q1中此時剩餘4,把4出對列達到出棧的效果。  這個時候如果我們又加入乙個元素5,那麼我們應該把5放到

q1還是q2,因為現在q2中有 1 2 3,把5放到q1不方便統計,所以要把5放入到q2;如果5放到了q1,等下編寫出棧的**很麻煩,如果放到q2我們只需要分類:q2

是不是為空,為空的為一種情況,不為空的為一種情況:

所以最後:

如果q1與q2都為空,那麼往q1中插入元素

如果q1不為空,那麼往q1中插入元素

如果q2不為空,那麼往q1中插入元素

**實現:

#includeusing namespace std;

#include#includetemplateclass queue

void pop()

}sout.pop();//當出棧的數字不為空時,將出棧裡面的數字進行pop

} const t& front()

}return sout.top();

}protected:

stacksin;//定義入棧

stacksout;//定義出棧

};int main()

劍指offer 面試題 兩個佇列實現棧

不像倆個棧實現佇列,兩次先進後出之後就是先進先出,佇列幾次先進先出仍然是先進先出,那麼我們看看實際情況,將佇列裡除最後乙個以外,全都拿走,剩下的這最後乙個就是想要的結果,那麼先前拿走的那些放 呢?給了兩個佇列,那就放在另外乙個佇列裡。若是在出的話,就對另乙個佇列進行相同的操作。templatecla...

《劍指offer》面試題七 用兩個棧實現佇列

原題位址 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。這裡用兩個陣列來模擬兩個棧。由於棧的特點是先進後出,佇列的特點是先進先出,所以這裡要用兩個棧來實現,乙個棧先進後出,兩個棧的話就可以先進先出了。其中乙個棧 稱呼a棧吧 專門用來完成push操作。只要...

劍指Offer 面試題七 用兩個棧實現佇列

templateclass cqueue cqueue void t deletehead void print private stackstack1 stackstack2 stack1只相當於乙個轉換器,新增元素時經過stack1將元素統統存入stack2中,也就是說stack2中存入元素,s...