1棧
1>棧的定義:
棧是限定僅在表尾進行插入和刪除操作的線性表。
我們把插入和刪除的一端稱為棧頂(top),另一端稱為棧底(bottom),不包含任何元素的棧稱為空棧。棧又稱為後進先出(last in first out)的線性表,簡稱lifo結構。
2>棧的儲存結構
由於棧也是線性表,因此線性表的儲存結構對棧也使用,通常有順序棧和鏈棧兩種儲存結構,這兩種儲存結構的不同,即使得實現棧的基本運算的演算法也有所不同。
(1)順序儲存結構
(2)鏈式儲存結構
如果棧的使用過程中元素變化不可**,有時很小,有時非常大,那麼最好是用鏈棧【儲存空間不固定可伸縮】。
2 佇列
1>佇列的定義
佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。
佇列是一種先進先出(first in first out)的線性表,簡稱fifo。允許插入的一端稱為隊尾(rear),允許刪除的一端稱為隊頭(front)。
佇列是一種運算受限的線性表,它的運算限制與棧不同,是兩頭都有限制,插入只能在表的一端進行(只進不出),而刪除只能在表的另一端進行(只出不進)。
2>佇列的儲存結構
佇列也是線性表,所以有兩種儲存方式,順序儲存和鏈式儲存。
(1)順序儲存結構(順序佇列)
缺點,儲存空間不夠用的時候需要開發人員通過程式設計手段來擴充套件陣列容量。
衍生迴圈佇列:頭尾相接的順序儲存結構成為迴圈佇列。
(2)鏈式儲存結構(鏈隊)
佇列的鏈式儲存結構,其實也就是線性表的單鏈表,只不過它只能尾進頭出而已,我們把它簡稱為鏈佇列。
總結:棧(stack)是限定在表尾進行插入和刪除操作的線性表。
佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。它們均可使用線性表的順序儲存結構來實現,但都存在著順序儲存的一些弊端(空間不夠用)。因此它們各自有各級的技巧來解決這個問題,
對於棧來說,如果是兩個相同資料型別的棧,則可以用陣列的兩端作為棧底的方法來讓兩個棧共享資料,這就可以最大化地利用陣列的空間。
對於佇列來說,為了避免陣列插入和刪除時需要移動資料,於是就引入了迴圈佇列,使得隊頭和隊尾可以在陣列中迴圈變化。解決了移動資料的時間損耗。
他們也都可以通過鏈式儲存結構來實現,實現原則上與線性表基本相同。
資料結構小結 (三)棧與佇列
資料結構來具體實現。佇列 queue 也是表,然而,使用佇列時插入在一端進行而在另一端進行刪除操作。對與佇列而言,不論是使用佇列或者使用鍊錶都是快速的o 1 時間完成操作。先進先出 佇列可以使用陣列與鍊錶實現 陣列實現 其實陣列實現就是我們常說的迴圈佇列,迴圈佇列的應用很多,比如作為緩衝區使用,核心...
資料結構 棧和佇列
棧 基礎 知識棧 練習題 佇列 基礎知識 棧示意圖 後進先出 順序棧結構定義 define maxsize 1024 struct stack 操作函式 push 入棧 pop 出棧 struct lstack 鏈棧示意圖 操作函式 push 入棧 pop 出棧 注意 也可以直接呼叫系統已經寫好的庫...
資料結構 棧和佇列
本章的基本內容是 兩種特殊的線性表 棧和佇列 從資料結構角度看,棧和佇列是操作受限的線性表,他們的邏輯結構相同。從抽象資料型別角度看,棧和佇列是兩種重要的抽象資料型別。p棧 限定僅在表的一端進行插入和刪除操作的線性表。p允許插入和刪除的一端稱為棧頂,另一端稱為棧底。p空棧 不含任何資料元素的棧。a ...