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

2021-09-08 22:29:05 字數 1713 閱讀 2147

//

複雜的棧--鍊錶棧

#include#include

#define datatype int//

定義鍊錶棧資料型別

//定義鍊錶棧結構

struct

stacklink;

typedef

struct

stacklink stacklink;

//判斷棧是否為空

int isempty(stacklink *phead);

//進棧

stacklink * push(stacklink *phead, datatype num);

//出棧

stacklink * pop(stacklink *phead, stacklink *pout);

//清空

stacklink * setempty(stacklink *phead);

//遍歷棧中的資料

void findall(stacklink *phead);

//鍊錶棧容量無限大,但是代價是增加鍊錶遍歷成本

void

main()

printf("

\n******************************==\n");

//列印棧中的資料

findall(phead);

printf(

"\n******************************==\n");

//清空棧內元素

phead =setempty(phead);

//列印棧中的資料

findall(phead);

system(

"pause");

}//判斷棧是否為空

int isempty(stacklink *phead)

else}//

進棧stacklink * push(stacklink *phead, datatype num)

else

p1->pnext =p;

//這裡的phead->pnext會直接影響main()函式裡phead的值,因為phead->pnext本質上等於(*phead).pnext

//修改的是phead指標指向資料的值,而不是修改phead本身

}

return

phead;}//

遍歷棧中的資料

void findall(stacklink *phead)}//

出棧stacklink * pop(stacklink *phead, stacklink *pout)

else

//2.多個元素,找到倒數第二個元素

else

pout->data = phead->pnext->data;

//刪除棧中最後乙個元素

free(phead->pnext);

phead->pnext =null;

return

p; }

}}//

清空stacklink * setempty(stacklink *phead)

//最後刪除第乙個元素

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語言鍊錶實現棧

鍊錶實現帶頭結點的棧,入棧用頭插法 環境codeblocks include include include typedef int elemtype typedef struct node node,linkstack 初始化棧 linkstack initstack linkstack s 入棧...

棧的鍊錶實現(C語言)

原始碼檔案位址 由前面 所述 鍊錶實現的棧在操作過程中頻繁的pop和push會伴隨著頻繁的malloc和free,伴隨著很大的系統開銷。基於此,在此實現中,通過實現乙個空閒節點鍊錶,將pop之後的鍊錶節點不釋放,而是放入空閒鍊錶freenodeptr中 當棧進行push操作的時候,先從空閒節點鍊錶中...