大話資料結構 (三)棧與佇列

2021-10-04 05:04:01 字數 2824 閱讀 8146

棧的定義:棧是限定僅在表尾進行插入和刪除操作的線性表,是線性表內的乙個小分支。我們把允許插入和刪除的一端稱為棧頂(top),另一端稱為棧底(buttom),不含任何資料元素的棧稱為空棧。棧又稱為後進先出的線性表,簡稱lifo結構。在日常生活中,棧的魅力無處不在,比如ctrl+z回退快捷鍵,它會馬上返回到你上一步操作,而不是隨機的一步歷史操作。

棧的插入操作,叫做進棧,也稱壓棧、入棧。類似於子彈彈入彈夾,如圖所示。

棧的刪除操作,叫做出棧,也有的叫做彈棧。如同彈夾中的子彈出夾,如圖所示。

答:不一定,要看什麼情況。雖然棧對線性表的插入和刪除的位置進行了限制,但沒有對元素進出的時間進行限制,也就是說,在不是所有元素都進棧的情況下,事先進去的元素也可以出棧,只要保證是棧頂元素出棧就可以了。舉個栗子,現在有排好序的1,2,3三個數先**棧,1入棧後可以馬上出棧,2入棧時既是棧頂又是棧底,依次類推。

棧的順序儲存結構及實現:若儲存棧的長度為stacksize,則棧頂位置top必須小於stacksize。當棧存在乙個元素時,top等於0,因此通常把空棧的判定條件定為top等於-1。

棧的結構定義:

typedef

int selemtype;

typedef

struct

sqstack;

棧的順序儲存結構—進棧操作。

status push

(sqstack *s,selemtype e)

棧的順序儲存結構—出棧操作。

status pop

(sqstack *s,selemtype *e)

棧的鏈式儲存結構及實現:對於鏈棧來說,基本不存在棧滿的情況,除非記憶體已經沒有可以使用的空間。對於空棧來說,鍊錶原定義是頭指標指向空,通常對於鏈棧來說,是不需要頭結點的,那麼鏈棧的空其實就是top=null的時候。

鏈棧的結構**如下:

typedef

struct stacknodestacknode,

*linkstackptr;

typedef

struct stack

*linkstack;

鍊錶的操作都和單鏈表類似,只是在插入和刪除上特殊些。

入棧:

//入棧,頭插法

void

push

(linkstack &l,

char e)

出棧:

//出棧

bool

pop(linkstack &l,

char

&e)else

}

佇列的定義:是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。佇列是一種先進先出的線性表,簡稱fifo。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。佇列在日常生活中用的也挺頻繁,比如用鍵盤進行各種字母或數字的輸入,到顯示器上入記事本軟體上的輸出,加入你本來和女友聊天,想輸入的是god,而發出去的卻是dog。額。。。準備跪鍵盤吧

迴圈佇列:我們把佇列的這種頭尾相接的順序儲存結構稱為迴圈佇列。下面演示乙個例子,如圖一,是先**隊長為5,出隊a1,a2後的圖。

此時問題來了,空佇列時,front=rear,現在當佇列滿時,也是front等於rear,那麼如何判斷此時的佇列究竟是空還是滿呢?

typedef

int qelemtype;

typedef

struct

sqqueue;

迴圈佇列的初始化**如下:

status initqueue

(sqqueue *q)

`

迴圈佇列求佇列長度**如下:

int

queuelength

(sqqueue q)

迴圈佇列的入佇列操作**如下:

status enqueue

(sqqueue *q,qelemtype e)

迴圈佇列的出佇列操作**如下:

status dequeue

(sqqueue *q,qelemtype *e)

佇列的鏈式儲存結構,其實就是線性表的單鏈表,只不過它只能尾進頭出而已,我們把它簡稱為鏈佇列,操作和鍊錶類似,這裡就不贅述了,之後會通過一些棧和佇列的例項來加深理解。

引用他人的一句話:認識,是乙個又乙個小小的佇列重現。春夏秋冬輪迴年年,早中晚夜迴圈天。變化的是時間,不變的是你對未來執著的信念。

大話資料結構 棧與佇列

文章知識點來至於大話資料結構裡邊章節知識,這篇主要介紹棧與佇列在計算機中儲存形式,以及在某些演算法領域中對棧和佇列的相關應用。章節最後介紹了著名的逆波蘭表示式,以及通過演算法來實現該表示式的運算過程。在實現 的同時新增了流程圖。相關 原始碼請檢視文章最後。1 棧結構定義 2 棧的順序儲存 3 兩棧共...

大話資料結構4之棧與佇列

1.棧是限定僅在表尾進行插入和刪除操作的線性表。佇列是只允許在一端進行插入操作 而在另一端進行刪除操作的線性表。2.我們把允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 不含任何資料元素的棧稱為空棧。棧又稱為後進先出的線性表,簡稱lifo結構。棧的插入操作,叫做進棧,也稱壓棧 入...

大話資料結構(四) 棧和佇列

棧 一種線性表,限定只能在表尾進行插入和刪除的操作。這裡的表尾指的是棧頂,lifo結構。兩棧共享空間的資料結構一般用在兩個棧的空間需求有相反關係時,也就是乙個棧在增長時另乙個棧在縮短的情況,但是前提是兩個棧具有相同的資料型別。迭代和遞迴 迭代使用的是迴圈結構,遞迴使用的是選擇結構。遞迴必須至少有乙個...