C语言中的单链表
前言:对于大多数人来说,链表可能有点摸不着头脑,可能会问,为什么要用链表,多麻烦,我直接定义一个数组那不是很简单方便。其实链表就是动态的分配内存,用多少,开辟多少,这样内存空间就不会浪费。比如当我们定义一个数组 int a[10]来存放用户的信息,这时编译器就为数组分配了4*10 = 40个字节,但是有时候我们我们并不知道具体有多少个用户,这时候你直接定义出10个或者20个是不是会感觉有点浪费。
数组与链表:
1 . 数组开辟的空间是固定的而且是连续的,而链表用malloc开辟空间是不需要连续,灵活的,用多少就开辟多少,用完了用free释放。
2 . 数组定义后数据分配在栈,或者数据段中,如果在数组前面加const修饰,数据分配在只读数据段,而用链表malloc开辟后,数据存放在堆里。
攻克链表:说了这么多,可能大家还是不怎么会灵活运用,下面我举个例子。
这里我定义了个链表的节点,数据存放在data里面,而struct __node_t *next 用来存放下一个节点的地址,这样通过每个节点的struct __node_t *next 把节点一个个的链接起来,只要找到了头节点,就能找到所有的链表节点即存放与data中的数据。而结构体list_t 中的count用来记录具体有多少个节点,每增加一个节点就++,free一个就--,size用来记录节点中数据的数据类型,void*p 用来指向链表的头节点。
创建头信息与节点。
进行链表的尾插。
输入一个数据,开辟一个节点空间,然后尾插将一个个节点连起来。