例項2 棧和佇列 用兩個棧實現佇列

2021-08-15 23:13:43 字數 1180 閱讀 9565

問題描述:用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。

知識拓展棧(stack)和佇列(queue)是兩種操作受限的線性表。

線性表:線性表是一種線性結構,它是乙個含有n≥0個結點的有限序列,同乙個線性表中的資料元素資料型別相同並且滿足「一對一」的邏輯關係。「一對一」的邏輯關係指的是對於其中的結點,有且僅有乙個開始結點沒有前驅但有乙個後繼結點,有且僅有乙個終端結點沒有後繼但有乙個前驅結點,其它的結點都有且僅有乙個前驅和乙個後繼結點。

這種受限表現在:棧的插入和刪除操作只允許在表的尾端進行(在棧中成為「棧頂」),滿足「filo:first in last out」;佇列只允許在表尾插入資料元素,在表頭刪除資料元素,滿足「first in first out」。

棧與佇列的相同點:

1.都是線性結構。

2.插入操作都是限定在表尾進行。

3.都可以通過順序結構和鏈式結構實現。

4.插入與刪除的時間複雜度都是o(1),在空間複雜度上兩者也一樣。

5.多鏈棧和多鏈佇列的管理模式可以相同。

棧與佇列的不同點:

1.刪除資料元素的位置不同,棧的刪除操作在表尾進行,佇列的刪除操作在表頭進行。

2.應用場景不同;常見棧的應用場景包括括號問題的求解,表示式的轉換和求值,函式呼叫和遞迴實現,深度優先搜尋遍歷等;常見的佇列的應用場景包括計算機系統中各種資源的管理,訊息緩衝器的管理和廣度優先搜尋遍歷等。

3.順序棧能夠實現多棧空間共享,而順序佇列不能。

問題分析:有兩個棧,棧1和棧2.當入棧的時候,我們將它全放進棧1中,當需要出棧的時候,我們將棧1出棧到棧2中,然後再將棧2依次出棧。

**實現:

public class stackandqueue 

public int pop()

}result = stack2.pop().intvalue();

return result;

}public static void main(string args)

}

結果輸出:

用兩個棧實現佇列和用兩個佇列實現棧

template class cqueue 14 template 1516 19 template 20 t cqueue deletehead 2132 33 stack2不為空則直接輸出 34 t r value stack2.top 35stack2.pop 36return r value...

(1)用兩個棧實現佇列和(2)用兩個佇列實現棧

很經典的乙個演算法題,既考察了棧的性質,又考察了佇列的性質。我們可以定乙個stack1,stack2.入棧的時候直接入到stack1,當出棧的時候,先判斷stack2是否為空,為空的話,把stack1順序出棧壓入stack2.然後把stack2棧頂元素彈出。同理取front元素的時候也一樣。empt...

用兩個棧實現佇列 用兩個佇列實現棧

劍指offer 面試題7 用兩個棧實現佇列。templateclass cqueue 我們試著用兩個棧來模擬佇列的操作,發現如下可行操作 完整 實現 面試題7 用兩個棧實現佇列 分別完成在隊尾插入結點和在隊頭刪除結點的功能。date 2014 06 27 include include includ...