一、数据结构---链栈

 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 }
 

 

posted @ 2020-08-13 21:17  觅思剏新  阅读(127)  评论(0)    收藏  举报