elementtype.h 元素型別定義
#ifndef element_h_included
#define element_h_included
#define max_size 100
#define true 1
#define false 0
// 用來定義一些常用的資料元素
typedef
struct
elementtype;
#endif
// element_h_included
linkedstack.h 順序棧標頭檔案(包含棧資料結構、函式方法宣告)#ifndef linkedstack_h_included
#define linkedstack_h_included
//鏈棧標頭檔案:定義鏈棧資料結構及常用操作
#include
#include
#include
"element.h"
//定義鏈棧的結點
typedef
struct stacknodestacknode;
//定義鏈棧結構
typedef
struct linkedstacklinkedstack;
//初始化
void
initlinkedstack
(linkedstack* linkedstack)
;//壓棧操作 返回成功與否
intpushlinkedstack
(linkedstack* linkedstack,elementtype element)
;//出棧操作 返回成功與否 用乙個指標儲存出棧元素
intpoplinkedstack
(linkedstack* linkedstack,elementtype *element)
;//清空棧
void
clearlinkedstack
(linkedstack* linkedstack)
;//刪除整個棧
void
destroylinkedstack
(linkedstack* linkedstack)
;#endif
// linkedstack_h_included
seqstack.c 順序棧實現檔案(包含棧函式方法實現)#include
"linkedstack.h"
void
initlinkedstack
(linkedstack* linkedstack)
//壓棧操作 返回成功與否
intpushlinkedstack
(linkedstack* linkedstack,elementtype element)
//出棧操作 返回成功與否 用乙個指標儲存出棧元素
intpoplinkedstack
(linkedstack* linkedstack,elementtype *element)
//儲存元素
*element = linkedstack->top->data;
//出棧 因為要free 所以先儲存一下棧頂元素的位址
stacknode* tempnode = linkedstack->top;
linkedstack->top = linkedstack->top->next;
free
(tempnode)
; linkedstack->length--
;return true;
}//清空棧
void
clearlinkedstack
(linkedstack* linkedstack)
}//刪除整個棧
void
destroylinkedstack
(linkedstack* linkedstack)
chapter4棧與佇列 1 順序棧實現
對於棧來講,理論上線性表的操作特性它都具備,可由於它的特殊性,所以針對它在操作上會有些變化。特別是插入和刪除操作,我們改名為push和pop,英文直譯的話是壓和彈,更容易理解。你就把它當成是彈夾的子彈壓入和彈出就好記憶了,我們一般叫進棧和出棧。棧的抽象資料型別adt 棧 stack data 同線性...
棧和佇列 2鏈棧
adrian 鏈棧元素入棧 例如,將元素 1 2 3 4 依次入棧,等價於將各元素採用頭插法依次新增到鍊錶中,每個資料元素的新增過程如圖 2 所示 鏈棧元素出棧 例如,圖 2e 所示的鏈棧中,若要將元素 3 出棧,根據 先進後出 的原則,要先將元素 4 出棧,也就是從鍊錶中摘除,然後元素 3 才能出...
鏈棧與鏈佇列
首先,我們先搞清楚,棧的原理就是現金後出,譬如往箱子裡面放球,最先放進去的最後拿出來。下面給一下我臭臭的 include include 定義結構體 struct node int main q p 列印建立的鍊錶 t head next while t null 鏈棧 先入後出,因此新入的數應該在...