天天看點

C語言不用結構體寫一個棧,C語言結構體實作鍊式棧

stack(棧)是一中運算受限的線性表,它是先進後出,包含棧頂和棧底,并且隻允許在棧頂進行插入删除等操作,會包含倆種,靜态棧和動态棧,其實就是數組實作的棧和連結清單實作的棧,這邊實作的是用連結清單實作的棧。

C語言不用結構體寫一個棧,C語言結構體實作鍊式棧

主要是實作這些棧常用的方法。

資料結構

定義棧的資料結構,包含一個棧頂一個棧底。初始值棧頂和棧底都同時指向同一個節點。節點包含一個pnext 和一個value。

C語言不用結構體寫一個棧,C語言結構體實作鍊式棧

初始化init方法

前面能看到棧的資料結構,是以能聯想到初始化方法其實就是建立一個節點,并且把棧的棧頂和棧底指針都指向這個節點。

C語言不用結構體寫一個棧,C語言結構體實作鍊式棧

Push&Pop方法

既然是棧,肯定設計到push和pop操作。push操作會添加一個新節點指向棧頂節點,并且把棧頂的指針移動到新節點,pop是把棧頂指針移動到棧頂指針指向節點的下一個節點,并且釋放棧頂節點。

C語言不用結構體寫一個棧,C語言結構體實作鍊式棧

會用到判斷棧是否為空的方法,其實原理就是判斷棧頂指針和棧底指針是否相等。

清空棧和周遊輸出

清空棧是從棧頂開始,逐個的删除所有的節點,這邊需要注意的是不能直接删除并且移動棧頂指針,這樣就找不到被删除的節點了,而是要在删除的同時要釋放。周遊輸出和清空的思想差不多,從棧頂開始,逐個列印節點的value值。

C語言不用結構體寫一個棧,C語言結構體實作鍊式棧