用鍊錶實現堆疊

2021-08-02 23:32:33 字數 1174 閱讀 6668

堆疊資料一種後進先出的資料結構,只能在一端(稱為棧頂(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為鍊錶中的節...