資料結構之 棧和佇列

2022-08-08 23:12:17 字數 1586 閱讀 9173

棧和佇列是兩種重要的線性結構。

從資料結構來看,棧和佇列也是線性表,只不過是操作受限線性表

從資料型別來看,棧和佇列是不同於線性表的兩類重要的抽象資料型別。

棧和佇列作為特殊的線性表,其特殊性在於它們的基本操作是線性表操作的乙個子集。

佇列

定義只能在一端進行插入和刪除操作的線性表。

該操作端為線性表的表尾,稱之為棧頂(top),棧的另一端稱之為棧底(bottom)

棧的第乙個資料元素稱之為棧頂元素

當棧中沒有資料元素時稱為空棧

棧的插入操作被形象地稱為進棧或入棧(push),刪除操作稱為出棧或退棧(pop)

簡稱隊,它只允許在表的一端插入元素,而在另一端刪除元素。

允許插入元素的一端稱之為隊尾,允許刪除資料的一端稱之為隊頭。

向佇列中插入新的資料元素稱之為入隊,新的元素入隊後就成為佇列的隊尾元素

從佇列中刪除隊頭元素稱為出隊,隊頭元素出隊後,其後繼資料元素成為隊頭元素

特性後進先出

last in first out , lifo

先進先出

first in first out , fifo

儲存結構

主要有兩種基本的儲存結構:順序儲存結構和鏈式儲存結構

分別可以用陣列或單鏈表來實現

主要有兩種基本的儲存結構:順序儲存結構和鏈式儲存結構

分別可以用陣列或鍊錶來實現

應用數制轉換:如將乙個十進位制數n 轉換為k進製數m 

表示式求值

迷宮問題

實現遞迴

列印楊輝三角形

舞伴問題

棧的另乙個重要作用,就是在程式語言中實現遞迴。

在以下三種情況下,常常要用到遞迴的方法:

1、函式的遞迴定義

有很多數學函式就是遞迴定義的

如 階乘函式、二階fibonacci數列、冪函式和ackerman函式等 

2、資料結構的遞迴定義

有許多資料結構本身就是遞迴的,它們的操作也可以用遞迴來描述。

例如,單鏈表就是一種遞迴資料結構。

3、具有遞迴解法的問題 (如 八皇后問題、hanoi塔問題 等)

遞迴的應用舉例:求n的階乘 ,漢諾塔問題

順序佇列之 「假溢位」 :

隨著佇列中某些資料元素的出隊,陣列前面會出現一些空閒單元,而尾指標已經達到佇列的最大長度。

這個時候,如果有新的資料元素想要入隊,也不能插入。

實際佇列所用的儲存空間並沒有真正「被佔滿」 ,這種現象就叫做「假溢位」 。 

解決「假溢位」現象,使得佇列的儲存空間得到充分利用:

由於「假溢位」是順序佇列進行隊頭出隊、隊尾入隊的操作造成的。

乙個較巧妙的辦法就是將順序佇列的陣列看成乙個頭尾相接的迴圈結構,可稱為迴圈佇列。

其中,隊頭、隊尾指標與佇列中的資料元素之間的關係保持不變。

當出現上述「假溢位」的情況時,可以是尾指標或頭指標退回到 0 的位置 。這樣,如果佇列的頭部有空閒空間,則可繼續進行入隊操作。

共同學習,共同進步,若有補充,歡迎指出,謝謝!

資料結構之棧和佇列

棧 stack 是限定僅在表尾進行插入和刪除操作的線性表。我們把允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 不含任何資料元素的棧稱為空棧。棧又稱為後進先出 last in first out 的線性表,簡稱lifo結構。棧的插入操作,叫做進棧,也稱壓棧 入棧。類似子彈入彈夾。...

資料結構之棧和佇列

棧是乙個非常常見的資料結構,它在計算機領域中被廣泛的使用,比如作業系統會給每個執行緒分配乙個棧。用來儲存函式呼叫時各個函式的引數,返回值以及臨時變數等。棧的特點是先進後出。通常棧是乙個不考慮排序的資料結構,我們需要o n 時間才能找到棧中的最大值或者最小值,如果想要在o 1 時間內找到棧中的最大值或...

資料結構之棧和佇列

讀自 資料結構 c語言版 嚴蔚敏 吳偉民 清華大學出版社 棧 棧是限定僅在表尾進行插入或刪除操作的線性表。因此對於棧來說,表尾端有其特殊含義,稱為棧頂 top 相應地,表頭端稱為棧底 bottom 不含元素的空表稱為空棧。後進先出lifo 棧的順序儲存表示 define stack init siz...