棧 陣列 全過程 C語言實現

2021-10-05 05:32:06 字數 1797 閱讀 7655

本篇不討論棧的基本概念

棧的陣列實現

準備

鍊錶和陣列的一大不同就在於陣列是一片連續的記憶體空間,所以在實現棧陣列時要先定義一塊連續空間供棧使用。至於是多大的空間由自己定義,這裡以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 鏈...