1. 程式人生 > 實用技巧 >一、資料結構---鏈棧

一、資料結構---鏈棧

 1 #include<stdio.h>
 2 //定義結構體
 3 typedef struct{
 4     int data;
 5     struct Stack_chain * next;    
 6 }*Stack_chain,Stack;
 7 
 8 typedef struct index{
 9     //儲存棧的地址
10     Stack_chain top;
11     //棧的陣列下標,初始化為-1
12     int index;
13 };
14 //初始化棧,二級指標改變實參的地址
15 void init_stack(struct index **s){
16 *s = (struct index*)malloc(sizeof(struct index)); 17 (*s)->index = -1; 18 (*&(*s))->top = NULL; 19 }; 20 //進棧 21 Stack_chain push(Stack_chain s,int data,struct index *i){ 22 s = (Stack_chain)malloc(sizeof(Stack)); 23 Stack_chain head; 24 head = (Stack_chain)malloc(sizeof
(Stack)); 25 s->data = data; 26 s->next = NULL; 27 //判斷是否第一次入棧 28 if(i->index == -1) 29 { 30 //將棧底也就是陣列下標為0的地址儲存下來 31 head = s; 32 } 33 else{ 34 //將新分配的地址賦值給上一個結構體指標的next指標 35 i->top->next = s; 36 } 37 //陣列下標加1 38 i->index++; 39 //儲存此次分配的記憶體地址
40 i->top = s; 41 return head; 42 }; 43 //出棧 44 void pop(Stack_chain chain,struct index *i){ 45 while(i->index != -1) 46 { 47 printf("address=%d,data=%d,next_address=%d\n",chain,chain->data,chain->next); 48 //釋放記憶體空間 49 free(chain); 50 chain = chain->next; 51 i->index--; 52 } 53 }; 54 55 void main() 56 { 57 int data,a; 58 Stack_chain chain,head; 59 head = (Stack_chain)malloc(sizeof(Stack)); 60 struct index *id; 61 data = 1; 62 init_stack(&id); 63 //printf("%d,%d,%d\n",id,id->index,id->top); 64 printf("input data:\n"); 65 while(data != -1){ 66 scanf("%d",&data); 67 if(id->index == -1){head = push(chain,data,id);} 68 else 69 {push(chain,data,id);} 70 printf("%d,%d,%d,head=%d\n",id,id->index,id->top,head); 71 } 72 73 printf("Print data:\n"); 74 pop(head,id); 75 free(head); 76 free(id); 77 id = NULL; 78 head = NULL; 79 chain = NULL; 80 }