Linux内核链表的实现:
本质:带头节点的双向循环链表,且头节点为表中成员
头节点的next指针指向首节点
头节点的pre指针指向尾节点
linux内核链表的结点定义:
struct list_head {
struct list_head *next, *prev;
};
问题:数据放在哪里?
使用链表的一个最主要的目的就是使用链表的这种特性存放数据,现在数据都没有了,还怎么玩?别急,看我给你慢慢道来
形式1:
使用struct list_head自定义链表结点:
struct Node
{
struct list_head head;
Type1 value1;
Type2 value2;
//...
};
这个数据结构有个特点:head这个链表是该结构体的首元素,意味着该链表与该结构体的首地址是相同的。
Linux内核链表的创建及初始化
struct Node
{
struct list_head head;
int value;
};
int main()
{
struct Node l = {0};
struct list_head* list = (struct list_head*)&l;
INIT_LIST_HEAD(list);
return 0;
}
原文:https://www.cnblogs.com/-glb/p/12500961.html