您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關C語言中怎么實現鏈棧,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
/********************* 鏈棧的常規操作 ****************************/ LinkStack InitLinkStack(); // 初始化鏈棧 int StackEmpty(); // 判斷鏈棧空 int StackLength(); // 求鏈棧長(鏈棧元素個數) int Push(); // 入棧 壓棧 ElemType Pop(); // 出棧 彈棧 void DestroyStack(); // 銷毀鏈棧 /***************************************************************/
#include "stdio.h" #include "malloc.h" #define TRUE 1 #define FALSE 0 typedef int ElemType; // 鏈棧存儲元素的數據類型 /* * 定義鏈棧結構體 */ typedef struct Node{ ElemType data; // 棧結點數據域 struct Node *next; // 棧結點指針域 }*LinkStack, Node;
// 初始化鏈棧(帶頭結點的鏈棧) LinkStack InitLinkStack(){ LinkStack s = (LinkStack)malloc(sizeof(struct Node)); s -> next = NULL; return s; }
/* * 判斷鏈棧是否空 * s 鏈棧 */ int StackEmpty(LinkStack s){ if(s == NULL){ return FALSE; } return s -> next == NULL; }
因為是鏈式存儲結構,無需鏈棧判滿。
/* * 求鏈棧長度(棧中元素個數) * s 鏈棧 */ int StackLength(LinkStack s){ LinkStack p; int len = 0; if(StackEmpty(s)){ return FALSE; } p = s -> next; // 帶頭結點的鏈棧要先移動一下 while(p != NULL){ len ++; p = p -> next; } return len; }
/* * 入棧 壓棧 * s 鏈棧 * data 入棧數據 */ int Push(LinkStack s, ElemType data){ // 分配入棧結點 Node *new_node = (Node *)malloc(sizeof(struct Node)); if (new_node == NULL) return FALSE; // 結點分配失敗 // 跟單鏈表一樣使用頭插法 new_node -> data = data; new_node -> next = s -> next; s -> next = new_node; return TRUE; }
/* * 出棧 彈棧 * s 鏈棧 */ ElemType Pop(LinkStack s){ LinkStack top; ElemType data; // 判棧空 if(StackEmpty(s)){ return FALSE; } top = s -> next; // 訪問棧頂結點 data = top -> data; // 取出棧頂元素 s -> next = top -> next; free(top); // 釋放棧頂空間 return data; }
// 程序主入口 int main(int argc, char const *argv[]) { LinkStack s = InitLinkStack(); printf("StackEmpty():%d\n", StackEmpty(s)); printf("StackLength():%d\n\n", StackLength(s)); // 入棧元素 ElemType datas[] = {1, 3, 5, 7, 9}; // 動態計算入棧元素個數 int len = sizeof(datas) / sizeof(datas[0]); // for循環依次入棧 printf("Push():"); for(int i = 0; i < len; i++){ printf("%d\t", datas[i]); Push(s, datas[i]); } printf("\nStackEmpty():%d\n", StackEmpty(s)); printf("StackLength():%d\n\n", StackLength(s)); // 出棧 彈棧 printf("Pop(): "); while(!StackEmpty(s)){ printf("%d\t", Pop(s)); } printf("\nStackEmpty():%d\n", StackEmpty(s)); printf("StackLength():%d\n\n", StackLength(s)); return 0; }
結果如下:
StackEmpty():1 StackLength():0 Push():1 3 5 7 9 StackEmpty():0 StackLength():5 Pop(): 9 7 5 3 1 StackEmpty():1 StackLength():0
C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用于底層開發,使用C語言可以以簡易的方式編譯、處理低級存儲器。
關于“C語言中怎么實現鏈棧”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。