C语言 动态静态链表(基础)

我本专业是C#,   .net  ,自学C ,感觉还行,也是基础小白 ,望大神们多多关照  

 

注意:     别忘了加上选址符 &    注意哦****   单向动态链表

原理很简单:就是 结构体定义定义一个本身结构体类型指针变量用来保存下一个结构体组地址, 最后一个本身结构体类型指针变量存NULL, 然后定义一个结构体指针变量,指向首地址,就层层相扣了

 

 

 

 

直接上代码把:  后面更新 插入链表和修改删除

 

   1 #define Len sizeof(struct student)

  2 //动态链表   *****************
  3 static int single = 0;
  4 
  5 
  6 static struct student* autoform() {
  7 
  8 
  9 static struct student* head, * p1, * p2;
 10 
 11 
 12 single = 0;
 13 
 14 
 15 p1 = p2 = malloc(Len);//分配内存
 16 
 17 
 18 printf("请输入:");
 19 
 20 
 21 scanf("%d%s",&p1->num,&p1->name);
 22 
 23 
 24 head = NULL; //首地址
 25 
 26 
 27 while (p1->num!=0)//输入学号不为0的时候循环
 28 
 29 
 30 {
 31 
 32 
 33 printf("请输入:");
 34 
 35 
 36 single++;
 37 
 38 
 39 if (single == 1)head = p1;//首地址
 40 
 41 
 42 else p2->next = p1;//指向上一次位置
 43 
 44 
 45 p2 = p1;//p1的前一个值 p2 指向p1
 46 
 47 
 48 p1 = malloc(Len);
 49 
 50 
 51 scanf("%d%s", &p1->num, &p1->name);
 52 
 53 
 54 }
 55 
 56 
 57 p1->next = NULL;
 58 
 59 
 60 return head;
 61 
 62 
 63 }
 64 
 65 
 66 //调用
 67 
 68 
 69 static void autoforms() {
 70 
 71 
 72 struct student* a;
 73 
 74 
 75 a = autoform();
 76 
 77 
 78 while (a!=NULL)
 79 
 80 
 81 {
 82 
 83 
 84 printf("%d %s",a->num,a->name);
 85 
 86 
 87 a = a->next;
 88 
 89 
 90 putchar('\n');
 91 
 92 
 93 }
 96 /*for (int i = 0; i < single; i++)

 99 {
100 
102 printf("%d %s", (a+i)->num, (a + i)->name);
103 
105 }*/
108 }
109 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/zonzi/p/12961383.html