在函式呼叫的過程中, 需要的就是先進後出的特點, 因此, 棧就出現了。
棧是一種資料結構, 是電腦怎麼處理常式運行的一種方式。 具有先進後出的特點, 下面看的就是這些抽象的資料結構怎麼用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);
實現棧的方式雖然有多種, 但是不要死記硬背, 要根據自己的理解去選擇, 怎麼適合自己的理解就怎麼選擇, 靈活的學習輕鬆的學習, 秘訣就在於此。 比如我的筆記中就記錄了多種方式, 但是這裡只選擇一種合適的:
程式設計領域其實是相通的,相通的東西就是程式設計思想,至於語言的語法不同,只是表現形式,要透過現象看本質,才能真正把握程式設計的靈魂,才能有希望學的越來越輕鬆,否則很可能陷入其中很苦惱。
探索輕鬆學程式設計之道,我一直在做......
程式設計領域其實是相通的,相通的東西就是程式設計思想,至於語言的語法不同,只是表現形式,要透過現象看本質,才能真正把握程式設計的靈魂,才能有希望學的越來越輕鬆,否則很可能陷入其中很苦惱。
探索輕鬆學程式設計之道,我一直在做......