1 #include <stdio.h> //增+刪+取棧頂+初始化+判空+輸出+銷毀 2 #include <stdlib.h> 3 #include <malloc.h> 4 typedef int DataType; 5 typedef struct Node { 6 DataType data; 7 struct Node *next; 8 }Node; 9 10 Node * InitStack(Node*top); 11 Node * Push(Node * top,DataType x); 12 Node * GetTop(Node*top,DataType *ptr); 13 Node * Pop(Node * top,DataType * ptr); 14 void DestoryStack(Node * top); 15 int Empty(Node * top); 16 17 int main(){ 18 DataType x; 19 Node * top = InitStack(top); 20 printf("對15和10執行入棧操作:\n"); 21 top = Push(top,15); 22 top = Push(top,10); 23 top = GetTop(top,&x); 24 printf("當前棧頂元素為:%d\n",x); 25 top = Pop(top,&x); 26 printf("執行一次出棧操作,刪除元素:%d\n",x); 27 top =GetTop(top,&x); 28 printf("當前棧頂元素為:%d\n",x); 29 printf("請輸入待入棧元素:"); 30 scanf("%d",&x); 31 Push(top,x); 32 if(Empty(top)==1) 33 printf("棧為空\n"); 34 else 35 printf("棧非空\n"); 36 DestoryStack(top); 37 return 0; 38 } 39 //初始化 40 Node * InitStack(Node*top){ 41 top=NULL; //棧頂置為空 42 printf("初始化成功!\n"); 43 return top; 44 } 45 //入棧 46 Node * Push(Node * top,DataType x){ 47 Node * s = (Node *)malloc(sizeof(Node)); //malloc申請第一個結點,賦給指向該結點的棧頂指針------- * s 48 s -> data = x; //為節點的data屬性賦值 49 s -> next = top; //為節點的next指向前一個節點 50 top = s; //棧頂指針指向新節點 51 printf("%d入棧成功!\n",x); 52 return top; 53 } 54 Node * GetTop(Node*top,DataType *ptr){ 55 if(top==NULL){ //判斷是否是空棧-----棧頂是否為空 56 printf("下溢錯誤,取棧頂失敗\n"); 57 return 0; 58 } 59 *ptr = top->data; //將棧頂Top的data域賦值給*ptr(指針參數*ptr的值會傳回主函數) 60 return top; 61 } 62 //銷毀 63 void DestoryStack(Node * top){ 64 Node * p = top; //聲明一個指向待刪除節點的指針 ------ * p (防止丟失,后面要手動釋放) 65 while(top!=NULL){ //只要棧頂不為null就循環 66 top = top -> next; //循環下移棧頂Top 67 free(p); //釋放p 68 p = top; //重復使用指針 * p 進行下一輪循環刪除,直至棧頂Top為空 69 } 70 } 71 //彈棧 72 Node * Pop(Node * top,DataType * ptr){ 73 Node * p = top ; //聲明一個指向待刪除節點的指針 ------ * p (防止丟失,后面要手動釋放) 74 if(top==NULL){ //判斷是否為空棧 75 printf("下溢錯誤,刪除失敗\n"); 76 return 0; 77 } 78 * ptr = top->data; //將待刪除節點的data值賦給 * ptr 供給主函數 79 top = top->next; //棧頂Top向棧底移動一位 80 free(p); //手動釋放待刪除節點 81 return top; 82 } 83 //判空 84 int Empty(Node * top){ 85 if(top==NULL) //棧頂Top是否為null 86 return 1; 87 else 88 return 0; 89 }
分析都在注釋里啦~就不分塊說啦~反而覺得注釋還可以更好的對應代碼,比之前得筆記好一些呢