堆疊資料一種後進先出的資料結構,只能在一端(稱為棧頂(top))對資料項進行插入和刪除。基本的堆疊操作是push和pop,push是把乙個新值壓入堆疊的頂部,pop是把堆疊的頂部的值移除並返回這個值。堆疊只提供對它的棧頂值的訪問。
堆疊很容易實現,可以用靜態陣列、動態陣列、鍊錶實現堆疊。本文介紹的是鍊錶實現的堆疊。
#include
#include
#define stack_type int
void push(stack_type value);
void pop(void);
stack_type top(void);
bool isempty(void);
int isfull(void);
typedef
struct node
node, * pnode;
typedef
struct stack
stack, * pstack;
//全域性變數棧頂指標 stack
static pnode stack;
//堆疊是否為空
bool isempty(void)
//鏈式堆疊不會滿
int isfull(void)
//壓入堆疊
void push(stack_type value)
pnew->pnext = stack;
pnew->data = value;
stack = pnew;
} //移除棧頂元素 ,並獲取元素的資料
void pop(void)
else
}//返回棧頂元素的資料
stack_type top(void)
else
}int main()
實驗結果:
程式很簡單,執行push操作把資料1,2,3依次壓入堆疊,這時發現最後進去的資料項是在棧頂。然後依次執行pop操作,發現後push進去的元素先移除。由於堆疊的鏈式結構比較簡單,這裡就不再詳細敘述了,等以後有時間,再補充堆疊的具體應用和堆疊的陣列實現。
鍊錶堆疊C實現
typedef int elementtype typedef structlist list makeempty void insert elementtype x,int i list ptrl if i 1 i ptrl last 2 for j ptrl last j i 1 j 將a i ...
堆疊的鍊錶實現
鍊錶是帶頭結點的.每次執行入棧操作,都是把資料壓入第1個節點.完整 如下 include define true 1 define false 0 typedef int elementtype struct s stack typedef struct s stack stack typedef ...
堆疊的鍊錶方式實現
除了公式化即陣列的實現方式,堆疊還可以用鍊錶的方式實現,這種方式對空間利用率更高。在使用鍊錶來表示堆疊時,必須確定鍊錶的哪一端對應於棧頂。如果把鍊錶的右端作為棧頂,那麼可以利用鍊錶操作 i n s e r t n x 和d e l e t e n x 來實現堆疊的插入和刪除操作,其中 n為鍊錶中的節...