天天看點

C語言實作資料結構之棧的詳解

在函數調用的過程中,需要的就是先進後出的特點,是以,棧就出現了。

棧是一種資料結構,是計算機怎麼處理程式運作的一種方式。具有先進後出的特點,下面看的就是這些抽象的資料結構怎麼用C語言代碼來實作,棧能實作,那麼其他的資料結構也就自然可以用C語言實作的了,如:隊列。

C語言實作棧的代碼,可以有數組形式,連結清單形式,下面講解的是數組形式來實作。

靜态數組因為有個大小,而且它在記憶體的棧區,預設為1M,是以靜态數組不會配置設定的很大,是以用數組來實作,有個棧的容量的問題,自然就會帶出“棧頂”和“棧底”,的概念。

實作環境:Visual Studio 2017

存儲資料需要數組,同時有個棧中目前位置,可以想的到,在C語言中應該至少用結構體來實作。

實作棧的結構體如下:

然後根據棧的特點,會有這麼幾個接口:

1:判斷是否棧滿;

2:判斷是否棧空;

3:設定棧為空;

4:入棧;

5:出棧;

為了友善數組操作,先定義一個宏:

#define N 100

下面是各個接口的實作:

調用以上接口,來測試棧的效果:

測試結果:

其實棧的實作還有連結清單的方式來實作。同時,C語言實作棧,隻能到面向過程的範圍。可以用C++來實作面向對象的棧方式,調用起來更加友善,形如:

Mystack ms;

ms.push(1);

ms.push(2);

ms.push(3);

ms.push(4);

ms.push(5);

彈出形如:

int a=ms.pop(1);

實作棧的方式雖然有多種,但是不要死記硬背,要根據自己的了解去選擇,怎麼适合自己的了解就怎麼選擇,靈活的學習輕松的學習,秘訣就在于此。比如我的筆記中就記錄了多種方式,但是這裡隻選擇一種合适的:

程式設計領域其實是相通的,相通的東西就是程式設計思想,至于語言的文法不同,隻是表現形式,要透過現象看本質,才能真正把握程式設計的靈魂,才能有希望學的越來越輕松,否則很可能陷入其中很苦惱。

探索輕松學程式設計之道,我一直在做......

本文轉自 ningcaichen66 51CTO部落格,原文連結:http://blog.51cto.com/ningcaichen66/1967365,如需轉載請自行聯系原作者

繼續閱讀