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

2021-09-25 07:53:56 字數 695 閱讀 9545

題目:用兩個棧實現乙個佇列。

結點的功能。

1 template 2

class

cqueue

3;

分析:棧的特點是**先出,佇列的特點是先入先出。首先按照入佇列的順序將資料壓入棧stack1中,那麼當需要刪除隊首元素時意味著要刪除棧底元素,此時可利用另乙個棧進行資料轉移,按照stack1出棧的順序將資料壓入stack2中,此時stack2的棧頂元素

即為隊首元素。此時可將stack2中的元素再轉移回stack1中,當需要刪除隊首元素時重複這個過程。事實上,最後一步轉移可以省略,因為當有元素需要插入佇列時,直接將改元素壓入stack1中,當需要刪除隊首元素時,如果stack2非空,直接從stack2中彈出棧頂元素如果stack2為空,則將stack1中的資料轉移至stack2中。**如下:

1 template 2

36 template 7

t deletehead()818

}19 t node =stack2.top();

20stack2.pop();

21return

node;

22 }

分析:佇列的特點是先入先出,因此若要彈出棧頂元素即要刪除佇列的尾元素,此時,可利用另乙個佇列進行資料轉移。和棧不同的是,這種轉移操作不影響資料的順序。

面試題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裡面,他們是作為容器介面卡出現的。儘管如此,棧和佇列在邏輯和對資料的操作方式上還是有很大的區別的。...