9-11 Linux内核链表

it2025-05-22  12

9.11.1 前述链表数据区域的局限性

(1)之前定义数据区域时直接int data;我们认为我们的链表中需要存储的是一个int类型的数。但是实际上现实编程中链表中的节点不可能这么简单,而是多种多样的。 (2)一般实际项目中的链表,节点中存储的数据其实是一个或者多个结构体+一些基础类型变量,这个结构体中包含若干个成员,这些成员加起来构成了我们的节点数据区域。

9.11.2 一般性解决思路:数据区封装为一个结构体

(1)因为链表实际解决的问题是多种多样的,所以内部数据区域的结构体构成也是多种多样的。这样也导致了不同的程序当中的链表总体构成是多种多样的。导致的问题是:我们无法通过一个泛型的、普遍使用的操作函数来访问所有的链表。这就意味着我们设计一个链表就得写一套链表的操作函数(节点创建、插入、删除、遍历…) (2)实际上深层次分析会发现:不同的链表虽然这些方法不能通用需要单独写,但是实际上内部的思路和方法是相同的,只是函数的局部地区有不同。(实际上链表操作是相同的,而涉及到数据区域的操作就有不同)。 (3)鉴于以上2点:我们的理念就是,能不能有一种办法把所有链表中操作方法里共同的部分提取出来用一套标准方法实现,然后把不同的部分留着让具体链表的实现者自己去处理。

9.11.3 内核链表的设计思路

(1)内核链表中自己实现了一个纯链表(纯链表就是没有数据区域,只有前后向指针)的封装,以及纯链表的各种操作函数(节点创建、插入、删除、遍历…)。这个纯链表本身自己没有任何用处,它的用法是给我们具体链表作为核心来调用。

9.11.4 list.h文件简介

(1)内核中核心纯链表的实现在include/linux/list.h文件中。 (2)list.h中就是一个纯链表的完整封装,包含节点定义和各种链表操作方法。

最新回复(0)