网站正在建设html,做直播网站赚钱吗,网站 营销,网站推广服务怎么做Linux | 数据结构之内核链表 时间:2023年12月20日15:42:45 文章目录 Linux | 数据结构之内核链表1.参考2.内核链表2-1.源码2-2.节点类型2-3.内核链表相关算法2-3-1.初始化`2-3-1-1`.宏的实现2-3-1-2.内联函数的实现2-3-2.插入`2-3-2-1`.将new指向的结点插入到head指向的结点后…Linux | 数据结构之内核链表 时间:2023年12月20日15:42:45 文章目录 Linux | 数据结构之内核链表1.参考2.内核链表2-1.源码2-2.节点类型2-3.内核链表相关算法2-3-1.初始化`2-3-1-1`.宏的实现2-3-1-2.内联函数的实现 2-3-2.插入`2-3-2-1`.将new指向的结点插入到head指向的结点后面(表头)`2-3-2-2`.将new指向的结点插入到head指向的结点前面(表尾) 2-3-3.删除2-3-4.移动链表中的某个结点1)将链表中的某个结点list移动到head指向的结点后面(表头)2)将链表中的某个结点list移动到head指向的结点前面(表尾) 2-3-5、内核链表相关的宏:1》通过内核结点指针ptr获得内核结点所在的结构体的地址2》基于内核结点指针向后循环3》基于内核结点指针向后循环4》基于数据结点指针向后循环 3.示例 4.拓展 1.参考 1.数据结构与算法教程,数据结构C语言版教程! (biancheng.net) 2.双向链表及创建(C语言)详解 (biancheng.net) 3.内核数据结构 —— 内核链表_内核链表长度怎么表示-CSDN博客 4.内核链表 - 搜索 (bing.com) 5.Linux | 内核链表-CSDN博客 6.structure/1_kernellist · cProgram/100Example - 码云 - 开源中国 (gitee.com) 2.内核链表
2-1.源码 [fly@752fac4b02e9 kernel]$ find ./ -name list.h
./include/linux/list.h
./include/config/debug/pi/list.h
./include/config/defconfig/list.h
./tools/perf/util/include/linux/list.h#ifndef _LINUX_LIST_H
#define _LINUX_LIST_H#ifndef ARCH_HAS_PREFETCH
#define ARCH_HAS_PREFETCH
static inline void prefetch(const void *x) {;}
#endif/** Simple doubly linked list implementation.** Some of the internal functions ("__xxx") are useful when* manipulating whole lists rather than single entries, as* sometimes we already know the next/prev entries and we can* generate better code by using them directly rather than* using the generic single-entry routines.*/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)#define INIT_LIST_HEAD(ptr) do { \(ptr)-next = (ptr); (ptr)-prev = (ptr); \
} while (0)/** Insert a new entry between two known consecutive entries.** This is only for internal list manipulation where we know* the prev/next entries already!*/
static inline void __list_add(struct list_head