棧和佇列是操作位置受限的線性表,即對插入和刪除的位置加以限制。
棧是限制僅在表的一端進行插入和刪除運算的線性表又稱為後進先出表(lifo表)。插入、刪除端稱為棧頂,另一端稱棧底。表中無元素稱空棧。
棧是僅允許在表的一端進行插入和刪除的線性表,因而是後進先出表。就好像食堂裡的一摞盤子,只能乙個乙個往上放,也只能從那一頭乙個乙個往下取。
棧的順序儲存結構稱順序棧。當棧滿時,做進棧運算必定產生空間溢位,稱「上溢」。 當棧空時,做退棧運算必定產生空間溢位,稱「下溢」。上溢是一種錯誤應設法避免,下溢常用作程式控制轉移的條件。
佇列是一種運算受限的線性表,允許刪除的一端稱隊首,允許插入的一端稱隊尾。佇列又稱為先進先出線性表,fifo表。
佇列是允許在表的一端進行插入,另一端進行刪除操作的線性表,因而是先進先出表。佇列是一邊進一邊出的,就好像我們在食堂裡排隊一樣,隊頭出列,隊尾入列。
佇列的順序儲存結構稱順序佇列。設定front和rear指標表示隊頭和隊尾元素在向量空間的位置。順序佇列中存在「假上溢」現象,由於入隊和出隊操作使頭尾指標只增不減導致被刪元素的空間無法利用,隊尾指標超過向量空間的上界而不能入隊。
為克服「假上溢」現象,將向量空間想象為首尾相連的迴圈向量,儲存在其中的佇列稱迴圈佇列。i=(i+1)%queuesize
迴圈佇列的邊界條件處理:由於無法用front==rear來判斷佇列的「空」和「滿」。解決的方法有:
1)另設乙個布林變數以區別佇列的空和滿;
2) 少用乙個元素,在入隊前測試rear在迴圈意義下加1是否等於front;
3) 使用乙個記數器記錄元素總數。
佇列的鏈式儲存結構稱為鏈佇列,乙個鏈佇列就是乙個操作受限的單鏈表。為了便於在表尾進行插入(入隊)的操作,在表尾增加乙個尾指標,乙個鏈佇列就由乙個頭指標和乙個尾指標唯一地確定。鏈佇列不存在隊滿和上溢的問題。在鏈佇列的出隊演算法中,要注意當原隊中只有乙個結點時,出隊後要同進修改頭尾指標並使佇列變空。
第三章 棧和佇列 總結
知識點 棧是限制僅在表的一端進行插入和刪除運算的線性表又稱為後進先出表 lifo表 插入 刪除端稱為棧頂,另一端稱棧底。表中無元素稱空棧。基本運算有 1 initstack s 構造乙個空棧 2 stackempty s 判棧空 3 stackfull s 判棧滿 4 push s,x 進棧 5 p...
第三章 棧和佇列
棧和佇列 一 棧 1 棧的定義 棧是限定僅在表尾進行插入和刪除操作的線性表,允許插入和刪除的一端稱為棧頂,另一端稱為棧底,不含任何資料元素的棧稱為空棧。2 在任何時候出棧的元素都只能是棧頂元素,即最後最後入棧者最先出棧。所以棧中元素除了具有線性關係外,還具有後進先出的特性。3 棧的抽象資料型別定義 ...
第三章 棧和佇列
棧和佇列是兩種常用的資料結構,同時又是操作受限的線性表,也是兩種重要的抽象資料型別。1 1棧是限定僅在表尾進行插入和刪除操作的線性表。棧中元素具有線性關係和後進先出的特性。2雖然對插入和刪除操作的位置限制減少了棧的靈活性,但同時也使得棧的操作更有效更容易實現。3棧的儲存結構分兩種,一種是順序儲存結構...