上一章節針對於C語言最基本的數據結構鏈式結構體作了解析,不清楚的能夠回顧一下。本章節主要針對於C語言的基礎數據結構棧作以解析。編程
棧(stack)又名堆棧,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操做的線性表。這一端被稱爲棧頂,相對地,把另外一端稱爲棧底。向一個棧插入新元素又稱做進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成爲新的棧頂元素;從一個棧刪除元素又稱做出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成爲新的棧頂元素。數組
故棧基本操做以下:微信
(1)建立棧數據結構
(2)入棧函數
(3)出棧學習
(4)判斷棧是否爲NULL視頻
(5)返回棧頂元素blog
根據實現棧的方式,咱們能夠把棧分爲如下三種描述方式:教程
原生數組描述內存
動態申請內存的數組描述
鏈式結構描述
數組描述棧,只不過多了後進先出的限制而已,它是靜態分配的,即便用前,它的內存就已經以數組的形式分配好了,因此在使用時,須要注意棧頂標記的大小。
舉個例子,把十進制的數字5轉二進制的數字,過程大概是這樣:
原生數組描述棧實現進制轉換代碼
動態申請內存的數組描述不在採用上述實用性的方法了,而是經過封裝相關棧函數去描述這種結構。這是寫數據結構的一種大體方法。
1.結構體定義與棧的建立過程:
結構體定義:描述棧的屬性棧:棧容量,棧頂標記
建立棧其實就是建立結構體變量
具體代碼
ps:棧頂標記初始值通常都是-1 ,爲了知足棧頂標記和數組下標一致
2.入棧操做
注意: 咱們的實現是將最新的元素放在了數組的末尾, 那麼數組末尾的元素就是咱們的棧頂元素,故可使用棧頂標記去計算棧中的元素個數。而後每次入棧後,棧頂標記日後移動。
具體實現代碼:
3.出棧操做和獲取棧頂元素
注意: 出棧操做應該是將棧頂的元素刪除,因爲數組實現的棧沒法刪除,故只能吧棧頂標記往前移動,簡稱爲一種"僞刪除"。
具體實現代碼:
4.判斷棧是否爲空
用戶判斷棧中是否有元素,經過棧頂標記去作便可
具體實現代碼:
動態申請內存的數組描述棧實現進制轉換代碼
鏈式棧
鏈式棧:鏈表的頭插法便可
這個不作詳細分析了,但願對你們有幫助!
另外若是你想更好的提高你的編程能力,學好C語言C++編程!彎道超車,快人一步!
C語言C++編程學習交流圈子,QQ羣757874045【點擊進入】微信公衆號:C語言編程學習基地
分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比本身琢磨更快哦!
編程學習軟件分享:
編程學習視頻分享: