棧 鍊錶 全過程 C語言實現

2021-10-05 05:25:51 字數 1580 閱讀 4309

棧的概念:

棧的圖模擬:

棧的基本操作概念

棧的c語言實現

準備工作,設定鍊錶中的單位節點。

#define elementtype int        

//為了方便,將資料型別設定為int型,

typedef

struct nodes

*stack,node;

// node為結構體型別。stack 為指標型別,相當於node *

//函式宣告

stack init_stack()

;int

is_empty

(stack s)

;void

push

(stack s, elementtype e)

;void

pop(stack s)

;elementtype return_top

(stack s)

;void

clear_stack

(stack s)

;

有些東西我會在注釋裡面標出,多看注釋。

初始化棧

//棧初始化

stack init_stack()

要使用malloc函式先包含標頭檔案#include。上面的初始化棧中,我設定了乙個頭節點方便後續操作。本文的棧頂就為頭節點,插入和刪除都在頭節點出進行。

判空操作

//判空操作

intis_empty

(const stack s)

//引數為頭節點

進棧(push)

//進棧

void

push

(stack s, elementtype e)

//引數為頭節點和要進棧的資料

這裡要說的是,因為是頭插法,所以先將新節點的指向頭節點的next,也就是棧頂第乙個元素。再將頭節點指向新節點就完成了。如果為空棧,新節點的next也剛好為null。

出棧(pop)

//出棧

void

pop(stack s)

//引數為頭節點

}

直接將頭節點指向棧頂的下乙個節點會造成棧頂節點無法free掉,需要乙個flag指向棧頂節點。

讀取棧頂元素

//讀取棧頂元素

elementtype return_top

(const stack s)

//引數為頭節點

else

return s->next->data;

}

具體怎麼返回,根據自己的elementtype而定。

清空棧

//清空棧

void

clear_stack

(stack s)

//引數為頭節點

只要還有元素就pop,直到空棧為止。

結束

以上就是棧的基本操作的全過程。

棧 陣列 全過程 C語言實現

本篇不討論棧的基本概念 棧的陣列實現 準備 鍊錶和陣列的一大不同就在於陣列是一片連續的記憶體空間,所以在實現棧陣列時要先定義一塊連續空間供棧使用。至於是多大的空間由自己定義,這裡以maxsize為50示例。define elementtype int 為了方便,資料型別設定為int型 define ...

C語言編譯全過程

c語言編譯全過程 編譯的概念 編譯程式讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並且按照作業系統對可執行檔案格式的要求鏈結生成可執行程式。編譯的完整過程 c源程式 預編譯處理 c 編譯 優化程式 s asm 匯程式設計序 obj...

C語言編譯全過程

編譯的概念 編譯程式讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並且按照作業系統對可執行檔案格式的要求鏈結生成可執行程式。編譯的完整過程 c源程式 預編譯處理 c 編譯 優化程式 s asm 匯程式設計序 obj o a ko 鏈...