链表简介
链表是一种常用的数据结构,它通过指针将一系列数据节点连接成一条数据链。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。Linux内核链表为双向循环链表~
Linux内核链表函数清单
创建链表:INIT_LIST_HEAD()
插入节点:list_add()
尾插节点:list_add_tail()
删除节点:list_del()
取出节点:list_entry()
遍历链表:list_for_each()
Linux内核链表实现
struct list_head {
struct list_head *next,*prev;
};
#define LIST_HEAD_INIT(name) {&(name), &(name)}
#define LIST_HEAD(name) struct list_head name=LIST_HEAD_INIT(name)
static inline void INIT_LIST_HEAD(struct list_head *list)
{
list->prev = list;
list->next = list;
}
static inline void list_add \
(struct list_head *new, struct list_head *head)
{
__list_add (new, head, head->next);
}
static inline void __list_add \
(struct list_head *new,