1. 程式人生 > 實用技巧 >C語言資料結構與演算法——棧(1)

C語言資料結構與演算法——棧(1)

棧的定義
作為一種限定性線性表,是將線性表的插入和刪除運算限制為僅在表的一段進行。(一般在表尾進行)
如下表:
表中允許插入、刪除擦歐總的一端稱為棧頂(Top);
表的另一端被稱為棧底(Bottom)
在這裡插入圖片描述
當棧中沒有元素時稱為空棧
棧的插入操作稱為進棧入棧
棧的刪除操作稱為出棧退棧

棧的特點:後進先出(LIFO)
棧的儲存結構;順序儲存鏈式儲存
在這裡插入圖片描述
在這裡插入圖片描述
順序棧的C原因呢描述:
在這裡插入圖片描述
棧的基本操作:
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

雙端棧
雙端棧就是棧的兩邊各有自己的棧頂和棧尾。分別可以在兩端進行進棧和出戰操作。
注意:
雙端棧的兩端是它的棧底,它是不變的!!!

雙端棧的特點
後進先出(LIFO)
先進後出(FILO)


注意:
當程式裡邊有多個棧時,首先討論兩個棧的共享空間問題。

不確定哪個棧已經達到最大空間,有可能會出現其中的一個棧滿,並且發生了溢位但是其餘的棧都還是空閒的或只是使用了一部分儲存空間的情況。

如果在空間有限的情況下,怎麼樣充分利用?
如下:

兩棧共享技術——雙端棧
主要利用了“棧底位置不變,而棧頂位置動態變化”的特性。首先為兩個棧申請一個共享的一維陣列空間【M】,將兩個棧的棧底分別放在一維陣列的兩端,分別是0 , M-1。
在這裡插入圖片描述
兩個棧是相對的!!!

兩棧共享資料結構的定義:
在這裡插入圖片描述
對雙端棧操作應注意:
在這裡插入圖片描述
在這裡插入圖片描述
雙端棧的初始化:
在這裡插入圖片描述
雙端棧的進棧

在這裡插入圖片描述
雙端棧的出棧:
在這裡插入圖片描述

多個棧共享空間:
在這裡插入圖片描述
但是這種方法的不好之處在於,如果我們想往其中的一個棧中插入一個元素,則後面所有的棧都要往後移動來空出一個位置,這樣一來,元素移動量較大,這樣是比較浪費時間的!!

要避免棧上溢位更好的方法是使用鏈式儲存結構,讓多個棧共享所有可用儲存空間——鏈棧。
明天繼續!!!