棧(stack)是限定僅在表尾進行插入和刪除操作的線性表。
通常把允許插入和刪除的一端成為棧頂(top),另一端稱為棧底(bottom),棧又稱為後進先出(last in first out)的線性表,簡稱lifo結構。
對於棧的插入(進棧),相當於做了如下處理。
對於進棧操作push,其**如下:
/*插入元素e為新的棧頂元素*/
status push(sqstack *s,selemtype e)
s->top++;
s->
data
[s->top]
=e; return ok;
}
對於出棧操作pop,其**如下:
/*若棧不空,則刪除s的棧頂元素,用e返回,否則返回error*/
status
push(sqstack *s,selemtype e)
*e=s->data[s->top];
s->top--;
return ok;
}
對於鏈棧的進棧push操作,假設元素值為e的新節點為s,top為棧頂指標,**如下:
/*插入元素e為新的棧頂元素*/
status push(linkstack *s,selemtype e)
類似的出棧pop操作,假設變數p用來儲存要刪除的棧頂結點,將棧頂指標下移一位,最後釋放p:
/*插入元素e為新的棧頂元素*/
status push(linkstack *s,selemtype *e)
佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。
佇列是一種先進先出(first in first out)的線性表,簡稱fifo。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。
如果佇列的總個數不超過5個,但目前下標為2,3,4的位置已經被占用,接著入隊的話就會產生輸入越界的錯誤,可實際上,佇列在下標為0和1的地方還是空閒的,如下圖所示,這種現象叫做「假溢位」。
解決假溢位的方法就是後面滿了,再從頭開始,也就是頭尾相接的迴圈。這種頭尾相接的順序儲存結構稱之為迴圈佇列
迴圈佇列的入佇列操作**如下:
/*若佇列未滿,則插入元素e為q新的隊尾元素*/
status
enqueue(sqqueue *q,qelemtype e)
迴圈佇列的出佇列操作**如下:
/*若佇列不空,則刪除q中隊頭元素,用e返回其值*/
status
enqueue(sqqueue *q,qelemtype e)
佇列的鏈式儲存結構,其實就是線性表的單鏈表,只能尾進頭出,簡稱為鏈佇列。
鏈佇列的入隊和出隊操作**如下:
在可以確定佇列長度最大值的情況下,建議使用迴圈佇列,如果無法預知佇列的長度,則用鏈佇列。
大話資料結構讀書筆記(四) 棧和佇列
四 棧和佇列 棧 是限定僅在表尾進行插入和刪除操作的線性表。把允許插入和刪除的一端稱為棧頂,另一端稱為棧底,不含任何資料元素的棧稱為空棧。棧又稱為後進先出的線性表,簡稱lifo結構。線性表就有線性表的性質 棧的插入操作,叫做進棧,也稱壓棧 入棧。棧的刪除操作,叫做出棧,也稱彈棧。通項計算c 2n,n...
大話資料結構讀書筆記
第一章 資料結構的定義 資料就夠是相互直接存在一種或多種特定關係的資料元素的集合 邏輯結構 集合結構 線性結構 樹形結構 圖形結構 第二章 演算法 1 演算法的特性 輸入 輸出 有窮性 確定性和可行性 2 演算法事假複雜度定義 在進行演算法分析時,語句總的次數t n 第三章1 線性表 定義 零個或多...
大話資料結構 讀書筆記
是相互之間存在一種或多種特定關係的資料元素的集合。說白了就是資料的集合 但是集合裡面的資料之間存在特地的關係 這翻譯得好像沒說一樣 是指資料元素之間的相互關係 指資料的邏輯結構在計算機儲存形式 鏈式儲存結構 是把資料元素存放在任意的儲存單元 這組儲存單元可以是連續的 也可以是不連續的 資料型別指的是...