c++怎么实现数字数组的删除数字_C/C++数据结构:栈结构解析,最简单解析,让你一遍就会...
上一章節(jié)針對于C語言最基本的數(shù)據(jù)結(jié)構(gòu)鏈?zhǔn)浇Y(jié)構(gòu)體做了解析,不清楚的可以回顧一下。本章節(jié)主要針對于C語言的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)棧做以解析。
數(shù)據(jù)結(jié)構(gòu)之棧
棧(stack)又名堆棧,它是一種運算受限的線性表。限定僅在表尾進(jìn)行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進(jìn)棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
故棧基本操作如下:
(1)創(chuàng)建棧
(2)入棧
(3)出棧
(4)判斷棧是否為NULL
(5)返回棧頂元素
數(shù)據(jù)結(jié)構(gòu)之棧分類
根據(jù)實現(xiàn)棧的方式,我們可以把棧分為以下三種描述方式:
原生數(shù)組描述
動態(tài)申請內(nèi)存的數(shù)組描述
鏈?zhǔn)浇Y(jié)構(gòu)描述
原生數(shù)組描述棧
數(shù)組描述棧,只不過多了后進(jìn)先出的限制而已,它是靜態(tài)分配的,即使用前,它的內(nèi)存就已經(jīng)以數(shù)組的形式分配好了,所以在使用時,需要注意棧頂標(biāo)記的大小。
舉個例子,把十進(jìn)制的數(shù)字5轉(zhuǎn)二進(jìn)制的數(shù)字,過程大概是這樣:
原生數(shù)組描述棧實現(xiàn)進(jìn)制轉(zhuǎn)換代碼
動態(tài)數(shù)組實現(xiàn)棧
動態(tài)申請內(nèi)存的數(shù)組描述不再采用上述實用性的方法了,而是通過封裝相關(guān)棧函數(shù)去描述這種結(jié)構(gòu)。這是寫數(shù)據(jù)結(jié)構(gòu)的一種大致方法。
1.結(jié)構(gòu)體定義與棧的創(chuàng)建過程:
結(jié)構(gòu)體定義:描述棧的屬性棧:棧容量,棧頂標(biāo)記
創(chuàng)建棧其實就是創(chuàng)建結(jié)構(gòu)體變量
具體代碼
ps:棧頂標(biāo)記初始值一般都是-1 ,為了滿足棧頂標(biāo)記和數(shù)組下標(biāo)一致
2.入棧操作
注意: 我們的實現(xiàn)是將最新的元素放在了數(shù)組的末尾, 那么數(shù)組末尾的元素就是我們的棧頂元素,故可以使用棧頂標(biāo)記去計算棧中的元素個數(shù)。然后每次入棧后,棧頂標(biāo)記往后移動。
具體實現(xiàn)代碼:
3.出棧操作和獲取棧頂元素
注意: 出棧操作應(yīng)該是將棧頂?shù)脑貏h除,由于數(shù)組實現(xiàn)的棧無法刪除,故只能把棧頂標(biāo)記往前移動,簡稱為一種"偽刪除"。
具體實現(xiàn)代碼:
4.判斷棧是否為空
用戶判斷棧中是否有元素,通過棧頂標(biāo)記去做即可
具體實現(xiàn)代碼:
動態(tài)申請內(nèi)存的數(shù)組描述棧實現(xiàn)進(jìn)制轉(zhuǎn)換代碼
鏈?zhǔn)綏?/strong>
鏈?zhǔn)綏?#xff1a;鏈表的頭插法即可
這個不做詳細(xì)分析了,希望對大家有幫助!
另外如果你想更好的提升你的編程能力,學(xué)好C語言C++編程!彎道超車,快人一步!
編程學(xué)習(xí)軟件分享:
編程學(xué)習(xí)視頻分享:
分享(源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!
C語言C++編程學(xué)習(xí)交流圈子,點擊下方【了解更多】獲取更多資料!
總結(jié)
以上是生活随笔為你收集整理的c++怎么实现数字数组的删除数字_C/C++数据结构:栈结构解析,最简单解析,让你一遍就会...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 充电动画_iPhone
- 下一篇: 华硕 x86 android,【华硕X7