C語言基於鍊錶的棧

2021-09-30 11:37:19 字數 2005 閱讀 7439

學習資料結構與演算法時實現的棧,參考書目《資料結構與演算法分析 c語言描述》,以及在後面會分析我遇到的乙個問題。

標頭檔案:stack.h

/*************************************

*功能:基於鍊錶的棧,棧頂在表頭

***************************************/

#ifndef _stack_header_h_

#define _stack_header_h_

typedef struct node* pnode;

typedef pnode stack;

typedef int elementtype;

struct node

;stack initstack(void); // 初始化乙個棧

void deletestack(stack s);// 刪除乙個棧

void emptystack(stack s); // 清空乙個棧

int isempty(stack s); // 判斷是否是空棧,是返回true,否返回false

void push(elementtype e, stack s);// 將元素e壓入棧頂

elementtype pop(stack s); //彈出棧頂的元素

#endif // _stack_header_h_

原始檔:stack.c

#include #include #include #include #include "stack.h"

stack initstack(void)

void emptystack(stack s)

}void deletestack(stack s)

free(s);

}int isempty(stack s)

void push(elementtype e, stack s)

elementtype pop(stack s)

printf("this stack is empty!!!\n");

return 0;// 該返回值用來避免提示

}

主程式驗證:main.c

#include #include #include "stack.h"

int main()

// 彈出棧頂元素

int a = pop(mystack);

printf("棧頂元素為:%d \n", a);

下面分享並分析一下我寫的過程中遇到的乙個低階的錯誤。錯誤的根源在於初始化棧的函式,先看看這個函式:

void initstack(stack s)

用這個初始化函式初始化乙個棧後,在執行push函式等會操作這個棧的地方都會收到這個錯誤「program received signal sigse**, segmentation fault.」,這個錯誤的原因一般是指標沒初始化,後面在操作這個指標的時候就會出現錯誤。例如在主函式中:

int main()

mystack是乙個指向節點的指標,且沒初始化,即是乙個野指標,通過initstack(mystack)後,mystack還是乙個野指標,因為我們直接將這個指標當作實參傳給了initstack函式,這樣在呼叫後是不會改變該實參的,即沒有初始化,其實這個道理只要學過c語言就知道的,但我為什麼還是會犯這個低階錯誤呢,根本原因還是我理解的太膚淺了,我以為mystack是乙個指標,傳入指標是可以改變實參的值的,但其實不是這樣的,如果本來實參就是乙個指標的話,我們想改變該指標的值的話,就得傳入指標的指標,好吧,到裡就是這麼簡單,檢查這個錯誤花了2個小時啊。一定要細緻+努力啊。。。

鍊錶 基於C語言

最近複習了c語言的一些知識,使用c語言實現了資料結構中的鍊錶。下面是main.c檔案 include linklist.h include intmain printf len d n n linklistlength list for i 0 i 5 i printf len d n n link...

C語言 棧 鍊錶

普通鍊錶的建立 用鍊錶構建一串數字,並輸入另乙個數插入其中。以及鍊錶的逆序。include include struct node 鍊錶的結構體建立 int main t head k head next scanf d s for i 0 i i else struct node x,y x he...

C語言 複雜的棧(鍊錶棧)

複雜的棧 鍊錶棧 include include define datatype int 定義鍊錶棧資料型別 定義鍊錶棧結構 struct stacklink typedef struct stacklink stacklink 判斷棧是否為空 int isempty stacklink phead...