1. list_add(n, p)
将 n 向的元素插入 p 所指向的特定元素之后.
如果要将 n 插入在链表的开始,就设置 p 为第一个元素的地址(p为参数)
2.list_add_tail(n, p)
将 n 向的元素插入 p 所指向的特定元素之前.
如果要将 n 插入在链表的尾部,就设置 p 为第一个元素的地址(p为参数)
3.list_del(p)
删除 p 所指向的元素(没有必要指定链表的第一个元素)
4.list_empty(p)
检查由第一个元素的地址p指定的链表是否为空
5.list_entry(ptr,type,member)
其中ptr是指向该数据中list_head成员的指针,也就是存储在链表中的地址值,type是数据项的类型,member则是数据项类型定义中list_head成员的变量名
ptr 指向当前节点
type 数据结构的类型
member type数据结构类型中list_head成员的变量名
返回类型为 type 的数据结构的地址.
6.list_for_each(p, h)
对表头地址 h 指定的链表进行扫描,在每次循环时,通过 p 返回指向链表元素的 list_head结构的指针.
7.list_for_each_entry(p, h, m)
与 list_for_each 类似,但是返回包含了 list_head 结构的数据结构的地址,而不是list_head 结构本身的地址.
第一个参数 p 为传入的遍历指针,指向宿主数据结构,第二个参数 h 为链表头,为list_head结构,第三个参数 m 为list_head结构在宿主结构中的成员名。
#define list_for_each_entry(pos, head, member) \
for (pos = list_entry((head)->next, typeof(*pos), member), \
prefetch(pos->member.next); \
&pos->member != (head); \
pos = list_entry(pos->member.next, typeof(*pos), member), \
prefetch(pos->member.next))
阅读(1386) | 评论(0) | 转发(0) |