1、原理
2、静态链表
3、动态链表
目录
I、原理
由本结点内指向结构体类型的指针赋值为下一个结点的地址,就可以实现结点之间的链接,形成一个链表。大概原理如图:
此时一个完整的结构体类型就可以看作是一个结点,n个结点相连接形成一个链表。
II、静态链表(先定义好所有的变量,再引用)
(1)、创建:
- (a)、创立一个结构体类型,同时增加指向结构体类型的指针:struct (类型名){ 成员列表; struct + 类型名+指针名;};
- (b)、主函数内定义几个需要用到的结构体类型变量以及两个指针;定义的指针一定是struct 类型名+指针名形式,否则不能指向结构体的首地址。
- (c)、在主函数内定义好其余变量的值,并把下一个结构体的地址赋值给上一个结构体的指针,最后一个结构体指针为空指针。
(2)使用
- (d)最后以循环的形式输出,注意不能以“p.name”的形式输出
III、动态链表
补给:void *malloc(unsigned int size)表示在内存中分配一个长度为size的连续存储空间,其中size不为负数。此函数的返回值为所分配的首字节地址,但因为是无类型的指针,因而需要强制转换为结构体类型指针。建立动态链表时需要用malloc函数实时申请内存。需要用到的库函数为stdlib.h;
(1)、创建
(a)、第一步与静态链表的创建相同,建立一个结构体类型;
(b)、在主函数或者新建立的一个结构体类型指针函数内定义好相关的变量:结构体指针(包括头指针(指向首个结点的首字节)、指针p1(承接下一结点首字节地址,开辟新结点)、指针p2(连接两个结点))
其中,ln表示整个结构体所需要的内存:ln=sizeof(struct 结构体类型);可以定义为全局变量,也可以在函数中定义;
(c)、使用循环语句可以自由进行输入,并且可以自由决定创建的结点个数;
大概流程:
最后要把最后一个指针赋值为空指针;
(2)、输出
(d)、利用循环语句对已有的值进行输出;