思路:題目要求我們利用兩個「先進後出」的棧實現乙個「先進先出」的佇列。
插入時,將插入的元素放入stack1中。假設現在stack1中已經插入了若干元素,
要進行刪除操作。顯然現在棧頂的元素是後插入的應該後出,棧底的元素才應該
被刪除,而在stack1中無法直接刪除棧底元素。此時就應該借助stack2,之前
未對stack2進行操作,stack2為空。將stack1中的元素逐個出棧壓入stack2中,
那麼stack2中的棧頂元素就是要刪除的元素。之後要插入元素就壓入stack1中,
要刪除元素就將stack2棧頂元素刪除,若stack2為空,則將stack1的全部元素
逐個出棧壓入stack2中,再完成刪除,若stack1和stack2都為空,無法完成刪除操作。
注意:1、本題最好寫成模板,更為通用。
2、可以寫個判斷佇列是否非空的函式。
code:
1 #include 2 #include 3 #include4using
namespace
std;
56 templateclass
cqueue7;
1920
//建構函式
21 templatecqueue::cqueue(void)22
2526
//析構函式
27 templatecqueue::~cqueue(void)28
3133
3637 templatet cqueue::deletehead()
3847}48
49 t head =stack2.top();
50stack2.pop();
51return
head;52}
5354 templatebool cqueue::empty()
5559
6061
intmain()
6277
else
7882}83
}84return0;
85 }
面試題7 用兩個佇列實現棧
題目 用兩個佇列實現乙個棧。實現兩個函式push和pop,完成從棧頂插入和刪除結點的功能。思路 1 入棧 總是插入到非空佇列 中 2 出棧 將非空佇列中的前n 1個元素依次出佇列push進空佇列中,然後將最後乙個元素出佇列,完成出棧操作。c include stdafx.h include incl...
面試題7 用兩個棧實現佇列
template class cqueue 在上述佇列的宣告中可以看出,乙個佇列包含了兩個棧stack1和stack2,因此這道題的意圖是要求我們操作這兩個 先進後出 的棧實現乙個 先進先出 的佇列cqueue。我們通過乙個具體的例子來分析往該佇列插入和刪除元素的過程。首先插入乙個元素a,不妨先把它...
面試題7 用兩個棧實現佇列
templateclass queue queue t deletehead private stacks1 stacks2 首先,我們需要知道佇列和棧他們各自的特點。他們都是乙個線性資料結構。在stl裡面,他們是作為容器介面卡出現的。儘管如此,棧和佇列在邏輯和對資料的操作方式上還是有很大的區別的。...