棧的定義:棧是限定僅在表尾進行插入和刪除操作的線性表,是線性表內的乙個小分支。我們把允許插入和刪除的一端稱為棧頂(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結構。兩棧共享空間的資料結構一般用在兩個棧的空間需求有相反關係時,也就是乙個棧在增長時另乙個棧在縮短的情況,但是前提是兩個棧具有相同的資料型別。迭代和遞迴 迭代使用的是迴圈結構,遞迴使用的是選擇結構。遞迴必須至少有乙個...