一種操作受限制的線性表,遵從lifo原則。
是不是聽起來很高階呢,其實就是 last in first out (後進先出)
想想小時候的玩具手槍彈夾,就是這個道理。
棧的結構就是線性表,兩端分別叫做棧頂和棧底,插入和刪除只允許在棧頂進行。
儲存結構
1.陣列:
比較好處理,以陣列的最後為棧頂進行操作(如果是a[1]的話插入刪除絕對要人命)
a[0]一般是不用,剛好來儲存最後一位的下標。
2.鍊錶:
相對於表尾,乙個帶表頭的鍊錶的前端更適合作為棧頂,免去了找最後乙個的麻煩。
有時候也會額外整乙個整型變數記錄個數。
adt操作
此時的線性表就沒有之前那麼多*事了,也就是插入刪除、建立銷毀之類的。
應用
棧在遞迴函式方面是很用用處的,另外因為這個原則,所以在一些需要將輸出反向的時候,這個就很有用了。
在後面的幾篇文章(其實已經是前面的了,霧)我會介紹一下棧的應用。
再一次打出我們高階的原則:fifo(first in first out)
啥意思,就是食堂排隊打飯,那肯定是先到的人先打飯了。
儲存結構
和上面一樣,也是分兩種情況
鍊錶結構的佇列比較簡單,主要是分清楚誰是頭誰是尾,在頭節點插入刪除都方便,但是在尾節點刪除乙個。。。
emmm反正我是頭大,所以就頭是頭,尾是尾,這樣操作更加方便。
如果嫌找尾節點不好找,需要遍歷也可以自己加乙個指標專門指向尾節點,記得初始是頭節點,隨時更新就行了。
隊頭的刪除也一樣,不過小心將最後乙個結點刪除了,尾節點要進行修改。
如果使用陣列來儲存,事情就比較多了,因為在出隊時,如果沒有元素的移動,前面的坑就沒人填,空間就浪費了,容易造成假溢位(看著是陣列不夠用,其實前面都沒有用)
當然可以刪除乙個元素就移動一次,如果想要效率搞一點,就要涉及到迴圈佇列了。
別看了,下面沒有迴圈佇列
因為這個東西足夠單獨拿出來講一下了,不然字數太多看著發睏(尤其是今天剛碼了乙個小3000的阿克曼函式非遞迴),還有乙個原因就是考完試忘差不多了,老菜雞了需要複習一下(枯了)。
adt操作
置空、判空、插入刪除。
因為是需要這個結構處理問題,而不是需要他幹一些很麻煩的事情,如果有其他需要直接用鍊錶就完了麼,所以在adt上還是比較簡單的。
應用
emm這個應用目前見到的不是很多,接下來我會發乙個題目來講一下應用吧。
特殊線性表 棧
定義 限定僅在表尾進行插入和刪除操作的線性表。操作特性 後進先出。注意 棧只是對錶插入和刪除操作的位置進行了限制,並沒有限定插入和刪除操作進行的時間。const int max size 100 template class t class seqstack template class t voi...
線性表 棧和佇列
線性表是n個元素的有限序列。表示方法有兩種,一種是順序表示,一種是鏈式表示。順序表示即採用一組位址連續的儲存單元依次儲存線性表的資料元素,通常採用陣列來實現 鏈式表示是用一組任意的儲存單元儲存線性表的資料元素,每一結點包含兩個域 資料域和指標域,資料域儲存資料,指標域儲存後繼儲存位址資訊,實現為 i...
線性表 棧和佇列
一 線性表 list 1 定義 有序 有限的資料序列,其中的每個資料稱為元素 element 2 基本概念 空 empty 長度 length 頭 head 尾 tail 有序表 sorted list 無序表 unsorted list 3 基本操作 初始化 插入 刪除 訪問 修改 4 用抽象類 ...