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

2021-07-12 04:07:40 字數 655 閱讀 5686

templateclass queue

~queue()

{}t deletehead();

private:

stacks1;

stacks2;

};

首先,我們需要知道佇列和棧他們各自的特點。他們都是乙個線性資料結構。在stl裡面,他們是作為容器介面卡出現的。儘管如此,棧和佇列在邏輯和對資料的操作方式上還是有很大的區別的。比如棧是一種後進先出(lifo,last in first out)的資料結構,它只能在一端對資料進行操作,稱為棧頂。操作方式有push和pop。而佇列是一種先進先出(fifo,first in first out)的資料結構,可以在兩端進行操作,分別稱為隊首和隊尾。操作方式有push和front。

知道了以上這些,我們再來分析題目。題目要求用兩個棧實現乙個佇列,而佇列要求在兩端操作,而棧只能在一端進行操作,怎麼辦呢?很自然地,我們會想到將兩個棧尾尾相接,這樣在向佇列中插入元素的時候,就可以向棧s1中push,而刪除時在棧s2中pop。但要注意的是,如果s2為空而s1不為空,在刪除時需要將s1中的元素全部移動到s2中再從s2中pop。

t deletehead()

}if(!s2.empty())

}以上

完整**及測試用例在github上:點我前往

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

題目 用兩個佇列實現乙個棧。實現兩個函式push和pop,完成從棧頂插入和刪除結點的功能。思路 1 入棧 總是插入到非空佇列 中 2 出棧 將非空佇列中的前n 1個元素依次出佇列push進空佇列中,然後將最後乙個元素出佇列,完成出棧操作。c include stdafx.h include incl...

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

template class cqueue 在上述佇列的宣告中可以看出,乙個佇列包含了兩個棧stack1和stack2,因此這道題的意圖是要求我們操作這兩個 先進後出 的棧實現乙個 先進先出 的佇列cqueue。我們通過乙個具體的例子來分析往該佇列插入和刪除元素的過程。首先插入乙個元素a,不妨先把它...

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

題目 用兩個棧實現乙個佇列。結點的功能。1 template 2 class cqueue 3 分析 棧的特點是 先出,佇列的特點是先入先出。首先按照入佇列的順序將資料壓入棧stack1中,那麼當需要刪除隊首元素時意味著要刪除棧底元素,此時可利用另乙個棧進行資料轉移,按照stack1出棧的順序將資料...