棧的概念:
棧的圖模擬:
棧的基本操作概念
棧的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 鏈...