Loading... 动态链表:从有到无地建立起一个链表,即一个个地开辟结点和输入各结点的数据,并建立起前后相链的关系。 有人可能并不太理解结点到底是啥: 你可以把链表想象成一辆火车,结点就是其中一节一节的车厢,而车厢中所以的东西相当于结构体中的成员,车厢通过挂钩使前后车厢相连。 (补充:结点就是一个带有指针指向的结构体,通过结构体中某一个成员指向另一个结构体,这样就使得结构体之间关联了起来) ![](https://www.bdmcom.cn/usr/uploads/2021/05/190572498.gif) ```cpp #include<stdio.h> #include<stdlib.h> struct student { int num; //名字 int score;//分数 struct student *next; //指向下一个结构体的地址 }; int main () { struct student *head, *creat(), print (struct student *); //声明结构体指针,链表函数 , 输出函数 head = creat();//链表函数返回链表头地址赋值给指针head print(head); //调用输出函数输出链表 } struct student *creat() { struct student *a, *b, *head; int n = 0; a = b = malloc (sizeof(struct student));//首先开辟内存为结构体一样字节大小的储存空间(简单通俗来说就是创建一个与开头定义一模一样的结构体内存) 并使a,b都指向这一个结构体 scanf ("%d %d", &a->num, &a->score);// 为开辟的结构体内存中的成员赋予初值 head = NULL;//首先先使head的值为"NULL" while (a->num !=0 )//利用判断学号不为0,来持续创建结点,并为结点所在的结构体成员赋值 { n++; if (n==1) { head = a;// 当建立第一个结点就使head指向该结点 } else { b->next = a;//使表尾指向a结点地址,形成链接 b = a;//把a结点赋值给b结点 a = malloc (sizeof(struct student));//开辟内存空间,使结点a指向它 scanf ("%d %d", &a->num, &a->score);//为内存空间里面的元素赋初值 } } b->next= NULL;//结束循环后,使表尾指向一个空链表,(简单理解就是指向0,结束链表) return head;//返回链表的表头 } struct student print (struct student *head) { struct student *p;//声明一个结构体指针 p = head;//把表头地址赋予指针p if (head != NULL)//首先判断该链表不为一个空链表 { while (p!=NULL)//当表尾不为NULL持续输出所有结点 { printf ("num = %d , score = %d", p->num, p->score); p = p->next;//把p指向下一个结点的地址赋予p ,这样做才能达到循环输出结点的目的 } } } ``` 最后修改:2021 年 05 月 29 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果文章有用,请随意打赏。