本篇不討論棧的基本概念
棧的陣列實現
準備
鍊錶和陣列的一大不同就在於陣列是一片連續的記憶體空間,所以在實現棧陣列時要先定義一塊連續空間供棧使用。至於是多大的空間由自己定義,這裡以maxsize為50示例。
#define elementtype int
//為了方便,資料型別設定為int型
#define maxsize 50
//最大棧空間量
struct nodes
stack;
//棧名
//主要函式宣告
void
init_stack
(stack *s)
bool is_empty
(stack *s)
bool is_full
(stack *s)
bool push
(stack *s, elementtype e)
bool pop
(stack *s)
elementtype read_top
(stack *s)
void
clear_stack
(stack *s)
初始化棧
將top賦值為-1就相當於初始化了。因為空棧的情況下,棧頂就是棧底。
//初始化棧
void
init_stack
(stack *s)
//因為操作要改變棧內的資料,所以引數為指標型
判空操作
如果棧空返回true,如果棧非空,返回false。要用到布林值記得包含標頭檔案#include
。
//判空
bool is_empty
(const stack *s)
判滿操作
如果棧滿返回true,如果棧不滿,返回false。鍊錶一般不需要判滿,但陣列要。因為陣列要提前規定好大小,而鍊錶不用。
//判滿
bool is_full
(const stack *s)
進棧
先判滿,若棧滿則無法進棧,若不滿則將新資料放入棧頂。
//進棧
bool push
(stack *s,elementtype e)
return ret;
}
出棧
先判空,若棧空則無法進行出棧操作。
//出棧
bool pop
(stack *s)
}
讀取棧頂元素
讀取棧頂元素可以和出棧整合乙個函式。
//讀取棧頂元素
elementtype read_top
(const stack *s)
清空棧
配合pop,只要棧不空,就一直pop。
//清空棧
void
clear_stack
(stack *s)
結束 棧 鍊錶 全過程 C語言實現
棧的概念 棧的圖模擬 棧的基本操作概念 棧的c語言實現 準備工作,設定鍊錶中的單位節點。define elementtype int 為了方便,將資料型別設定為int型,typedef struct nodes stack,node node為結構體型別。stack 為指標型別,相當於node 函式...
C語言編譯全過程
c語言編譯全過程 編譯的概念 編譯程式讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並且按照作業系統對可執行檔案格式的要求鏈結生成可執行程式。編譯的完整過程 c源程式 預編譯處理 c 編譯 優化程式 s asm 匯程式設計序 obj...
C語言編譯全過程
編譯的概念 編譯程式讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並且按照作業系統對可執行檔案格式的要求鏈結生成可執行程式。編譯的完整過程 c源程式 預編譯處理 c 編譯 優化程式 s asm 匯程式設計序 obj o a ko 鏈...