想當黑客?淺談C語言編程:不會這個知識就別想了!

想當黑客?淺談C語言編程:不會這個知識就別想了!

你收藏了?沒用的,只收藏不關注你會錯過更多!


淺談C語言數據結構——鏈式堆棧

看到標題點進來的朋友,應該對黑客這個名詞很敏感吧?我想應該是這樣的,但是你們知道作為一名黑客需要學習哪些知識嗎?小編不是什麼大佬,但小編可以明確的告訴你,學習C語言是必不可少的一步,為什麼?因為C語言是一個非常“底層”的語言,也是應用最廣泛編程語言。你可以這樣理解,最底層的是機器語言,緊接著的是彙編,然後就是C語言。

想當黑客?淺談C語言編程:不會這個知識就別想了!

這是機器語言,看不懂?我也看不懂

學習C語言的過程中,數據結構是必須要掌握的,今天《一碳科技》就跟大家講一下數據結構中的堆棧——鏈式堆棧。

想當黑客?淺談C語言編程:不會這個知識就別想了!

實例教學——鏈式堆棧

堆棧有兩種,分別是循序堆棧鏈式堆棧,順序堆棧在前一篇文章我們已經講過了,比較簡單很容易理解,感興趣的朋友打開《一碳科技》的主頁即可看到。

想當黑客?淺談C語言編程:不會這個知識就別想了!

今天要講的鏈式堆棧,對於一些剛入門的小夥伴可能比較難以理解,因為

鏈式堆棧涉及到C語言中最令人頭疼的知識點——指針。在小編看來,鏈式堆棧就相當於對指針進行操作,為什麼呢?請看下文↓

創建節點

我們創建一個結構體來充當堆棧的一個節點,這個結構體有一個數據域和一個指針域,數據域用來儲存數據,這裡小編用來儲存整型數據指針域用來指明棧頂的下一個節點。不理解的可以看下圖↓

想當黑客?淺談C語言編程:不會這個知識就別想了!


想當黑客?淺談C語言編程:不會這個知識就別想了!

這是我們創建的堆棧節點

我們的棧頂指示器永遠指向左邊(上圖)的第一個節點,最左邊的節點為棧頂,最右邊的節點為棧底,堆棧數據的添加和刪除都是在棧頂進行的,遵循“

後進先出、先進後出”的原則。節點創建完畢之後,我們來創建我們需要的函數,這些函數並不是必要的,在這裡小編只是用來給大家做示例。

堆棧屬於一種數據結構,實現它並不意味著我們一定要寫某種形式的代碼,某種形式的函數才能實現,堆棧是一種數據元素與數據元素之間邏輯關係,我們只要實現這種邏輯關係就可以了,不論以什麼形式實現

初始化並創建第一個節點

小編這次示例中一共有4個函數,這四個函數分別實現初始化堆棧、出棧、入棧、遍歷棧堆。我們先創建“初始化棧堆”函數,這個函數很簡單,它創建一個堆棧的第一個

節點,並將它初始化(存入第一個數據)。具體實現步驟看下圖↓

想當黑客?淺談C語言編程:不會這個知識就別想了!

head變量是一個全局變量,它用來指明當前堆棧的棧頂,充當棧頂指示器,我們利用棧頂指示器來增加或刪除堆棧節點。head是一個指向“堆棧節點類型(inn)”的指針,在創建棧頂指示器或者堆棧節點時候,要注意變量的作用域,因為你創建的函數很可能無法改變它的值,怎麼避免呢?這就要用到指針了,因為你可以指明某個變量的地址,這樣一來函數就可以根據它的地址來對變量進行操作了。

想當黑客?淺談C語言編程:不會這個知識就別想了!

入棧

入棧函數也非常的簡單,稍稍認真看一會就能明白了。細心的小夥伴可能會問,為什麼要用malloc()函數來申請一塊inn類型大小的內存呢,直接申明一個inn類型變量,用head的next成員指向它不就行了嗎?答案是:“我們接下來要用free()函數來釋放內存

”,看不懂這裡?沒關係,當你用源碼練習的時候你就知道了!

想當黑客?淺談C語言編程:不會這個知識就別想了!

出棧

出棧函數和入棧函數是有一點關係的,因為出棧函數中的free()函數能釋放掉入棧函數動態申請的內存。出棧函數僅僅是一些指針與指針之間的轉換而已,沒有涉及到一些新的知識,理解這個函數僅僅需要你理解指針就可以了。

具體的實現步驟就看下圖吧,小編也不知道怎麼表達出來,你們看著源碼就能理解了。

想當黑客?淺談C語言編程:不會這個知識就別想了!

遍歷棧堆

便利堆棧函數,這個函數的功能是用來遍歷整個堆棧,並打印出堆棧節點的數據,供我們觀察我們的程序,是否按照我們預先設計的路線實現。這個函數也是一些指針之間的轉換,不是特別難,仔細看就能看出他的工作原理了。

想當黑客?淺談C語言編程:不會這個知識就別想了!

值得注意的是,這個函數中有一個rec指針,這個指針是用來幹嘛的呢?它是用來將棧頂指示器“復位”的,通過觀察我們可以看到,這個函數是使用棧頂指示器(head指針)來遍歷整個堆棧的,所以棧頂指示器會一步步的移到“棧底”,如果我們不將棧頂指示器“復位(調回棧頂

)”,那麼接下來的堆棧操作就沒有相應的棧頂指示器了。

想當黑客?淺談C語言編程:不會這個知識就別想了!

關注+私信關鍵字=源碼

小編對這篇文章不是特別的滿意,因為我沒能將鏈式堆棧的具體實現步驟講清楚,所以如果看完這篇文章還有什麼疑問的話,可以在下方評論區留言,小編會抽時間回覆你們哦!

下圖是程序運行結果↓

想當黑客?淺談C語言編程:不會這個知識就別想了!

想當黑客?淺談C語言編程:不會這個知識就別想了!

關注,然後私信《一碳科技》,發送關鍵字:“鏈式堆棧學習源碼”即可獲得學習源碼,記住!關鍵字不能錯哦


分享到:


相關文章: