在函數調用的過程中,需要的就是先進後出的特點,是以,棧就出現了。
棧是一種資料結構,是計算機怎麼處理程式運作的一種方式。具有先進後出的特點,下面看的就是這些抽象的資料結構怎麼用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,如需轉載請自行聯系原作者