双向循环链表
新链表是用LIST_HEAD(list_name)宏创建的。如上图中的(b)空链表所示,它申明类型为 list head的变量name,该变量作为新链表头的占位符。LIST_HEAD(list_name)宏还初始化 list head数据结构的 prev和next 字段,让它们指向list_name 变量本身。代码如下
#define LIST_HEAD_INIT(name) { &(name), &(name) }#define LIST_HEAD(name) \struct list_head name = LIST_HEAD_INIT(name)
下面列出了常见的链表操作,结合上图中的(a)分析下面的操作:
list_add(n,p)
把 n指向的元素插入 P 所指向的特定元素之后 (为了把n插人在链表的开始, set p to the address of the list head.)
list_add_tail(n,p)
把 n 指向的元素插到 P 所指向的特定元素之前 (为了把n 插入在链表的尾部,set p to the address of the list head)
list_del(p)
删除 P 所指向的元素 ( 没有必要指定链表的第一个元素)
list_empty(p)
Checks if the list is empty.
list entry(p,t,m)
Retur