【數(shù)據(jù)結(jié)構(gòu)】棧 (順序的基礎(chǔ)操作) (C語言版)

本來這個(gè)大坑是沒時(shí)間填了的,但是竟然可以填完這個(gè)大坑了。

棧的定義
????????課本介紹:棧是限定僅在表尾進(jìn)行插入或刪除操作的線性表。因此,對(duì)棧來說,表尾端有其特殊含義,稱為棧頂(top),相應(yīng)的,表頭稱為棧底(bottom)。不含元素的空表稱為空棧。

????????棧的定義沒啥說的,就一個(gè)先進(jìn)后出的容器。如果需要按照保存數(shù)據(jù)時(shí)相反的順序來使用數(shù)據(jù),則可以使用棧來實(shí)現(xiàn)。

案例引入
????????1.數(shù)制的轉(zhuǎn)換(進(jìn)制轉(zhuǎn)換)
????????2.括號(hào)匹配的檢驗(yàn)
????????3.表達(dá)式求值
????????4.舞伴問題
????????這些案例的實(shí)現(xiàn)會(huì)放到下一個(gè)專欄寫。

順序棧的定義,表示,實(shí)現(xiàn)
1.順序棧的定義(也是順序棧的存儲(chǔ)結(jié)構(gòu))? ? ? ? ?
????????順序棧是指利用順序存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)的棧,即利用一組地址連續(xù)的存儲(chǔ)單元依次存放自棧底到棧頂?shù)臄?shù)據(jù)元素,同時(shí)附設(shè)指針top棧頂元素在順序棧中的位置。當(dāng) 和
的值相等時(shí),表示空棧。
關(guān)于?,其實(shí)就是
,為什么定義那么復(fù)雜課本上也早就說過,是為了統(tǒng)一數(shù)據(jù)類型而定,是根據(jù)個(gè)人需求來的。其實(shí)跟 int 沒有實(shí)質(zhì)性的不同。包括后面會(huì)出現(xiàn)的
?都在這篇文章定義過了。

說明
????????(1)若? 為
,則表明棧結(jié)構(gòu)不存在。
????????(2)??諘r(shí),?和
的值相等,非空時(shí),
始終指向棧頂元素的上一個(gè)位置。
2.順序棧的初始化
????????也沒什么好說的,就是把??初始為
,表示???。
3.入棧
(1)先判斷棧是否滿,滿了返回。
(2)將新元素壓入棧頂,棧頂指針。
4.出棧
(1)先判斷棧是否為空,空了沒有元素應(yīng)當(dāng)返回
(2)棧頂指針, 棧頂元素出棧。

????????到這里其實(shí)這篇專欄是可以不寫的了,但其實(shí)之前寫了兩篇沒有再堅(jiān)持是因?yàn)檎n本上的一些繁雜定義確實(shí)是有點(diǎn)不太適合,這也是我之前不打算再寫課本上的數(shù)據(jù)結(jié)構(gòu)代碼的一個(gè)主要原因(但是現(xiàn)在有時(shí)間了, 還挺閑的)。這里會(huì)稍微寫一點(diǎn)??的
容器的內(nèi)容。(以下代碼可以直接復(fù)制粘貼到編譯器里面編譯運(yùn)行)
?????????比課本上簡單很多,也省去了指針越界的麻煩,但是容器本身越界還是會(huì)報(bào)錯(cuò)的,一行代碼就解決了課本上好幾行代碼的事情(雖然但是,在數(shù)據(jù)量極其大的時(shí)候,還是手搓的數(shù)據(jù)結(jié)構(gòu)跑得快)有精力的話建議學(xué)習(xí)一下?
,能將很多抽象的數(shù)據(jù)結(jié)構(gòu)具體化一些。
????????好久沒寫了,有錯(cuò)誤請(qǐng)指正。
