链表 (Linked list)
链表是一种数据结构,包含了一些相联系的节点。 这些节点有数据项和链接项组成,数据项存放数据,链接项指向一个节点。 从而使数据能够有序存储,不必受限于物理空间的有序性与大小限制
链表是一种很基本的数据结构,可以被用来组成一些通用的抽象数据结构, 例如,栈,队列,表等
如果使用 C 语言的话,有一些含有链表的库可以使用, 例如 queue.h, list.h, glib, sglib, 别忘了还有你自己的实现
- Linux 内核代码下的 list.h:
include/linux/list.h
- Mac 下的 queue.h:
/usr/include/sys/queue.h
- GLib: https://github.com/GNOME/glib
- SGLIB: http://sglib.sourceforge.net
- 自己的:
path/hack.h
那么多选哪个使用呢?
我觉得如果编写内核级代码,可以使用前两个
如果编写一般的应用程序,使用后面的那些。抽象程度高的,可移植性的,线程安全的等
实现
参考:https://developer.gnome.org/glib/2.42/
要实现的链表结构如下:
第一次实现的时候,使用的方式是不固定头节点的链表。 虽然是省了一个节点的空间,但是在使用上多有不变,当需要改变头结点的时候, 传的参数必须是头结点的地址,增加了出错的机率
源代码使用头文件 <mtypes.h>
的原因是为了保持实现和使用的一致性(都用到了结构定义)