首页
学习
活动
专区
圈层
工具
发布

#链表

Linux内核中的container_of宏详解

一个平凡而乐于分享的小比特

container_of是Linux内核中一个非常巧妙且常用的宏,它的作用是通过结构体成员的地址反向推导出包含该成员的结构体的地址。

600

UCOSIII笔记(十六)就绪列表

一个平凡而乐于分享的小比特

我们来一起深入浅出地剖析一下 uC/OS-III 内核的“心脏”之一——就绪列表。

400

Rust 中的 LinkedList:双向链表的设计智慧与实践陷阱

果粒蹬

但这种安全性有代价:无法进行 O(1) 时间的"剪切粘贴"操作(将某个节点从一个链表移动到另一个链表)而不改变其他指针。虽然 LinkedList::splic...

9910

C++ 链栈

Dragon水魅

与此形成对比的是静态链表,传入的是数组本身,不论是初始化还是赋值,访问的都是本身,所以使用 “.” 进行访问:

6510

C++ 静态链表

Dragon水魅

9310

C++ 循环双链表(带头结点)

Dragon水魅

10510

C++ 单链表(无头结点)

Dragon水魅

10210

C++ 顺序表(动态分配)

Dragon水魅

9210

C语言栈和队列的实现

用户12004530

栈(Stack)是一种操作受限的线性数据结构,它的核心规则是先进后出(FILO, First In Last Out)最先放入栈的元素,最后才能取出;最后放入的...

8210

C++ 单链表(带头结点)

Dragon水魅

6510

C语言单链表

用户12004530

既然有了结构,我们就可以先初始化单链表的节点,首先链表由一个一个的节点组成,并且每一个节点都指向下一个节点,而最后一个节点就指向NULL,那我们就可以先开辟一块...

8410

Linux内核中container_of宏深度刨析

byte轻骑兵

在 Linux 内核设备驱动开发中,常常会将设备相关的数据封装在一个结构体里,同时包含一个链表节点用于将该设备加入到全局设备链表中。当通过链表节点操作设备时,就...

8910

Linux内核中offsetof宏深度刨析

byte轻骑兵

在 C 语言编程中,结构体的成员在内存中是连续存储的,但由于对齐规则,成员之间可能会存在填充字节。offsetof 宏的主要功能就是准确计算出结构体中特定成员距...

6710

《算法导论》第 10 章 - 基本数据结构

啊阿狸不会拉杆

        双链表与单链表的区别在于,每个节点不仅有指向下一个节点的指针,还有一个指向前一个节点的指针。这使得双链表可以双向遍历,某些操作(如删除指定节点)...

8810

数据结构-串

啊阿狸不会拉杆

   我们可以使用链表来存储每一行的文本,每个结点存储一行的内容。通过指针操作来实现行的插入和删除。以下是部分代码示例:

6310

数据结构-限定性线性表 - 栈与队列

啊阿狸不会拉杆

   链队列使用链表来存储队列中的元素,队头对应链表的头节点,队尾对应链表的尾节点。

8310

数据结构专题 - 线性表

啊阿狸不会拉杆

循环链表是单链表的一种变体,其尾节点的指针域指向头节点,形成一个环。循环链表的特点:

11710

深入浅出:插入排序算法完全解析

伯灵

插入排序(Insertion Sort)是一种简单的排序算法,其基本思想与我们整理扑克牌的方式非常相似。我们将扑克牌从第二张开始依次与前面已排序的牌进行比较,将...

9510

【C语言深入探索】结构体详解(一):语法

byte轻骑兵

需要注意的是,在实际应用中,当链表不再需要时,应该遍历链表并释放每个节点所占用的内存,以避免内存泄漏。在这个示例中,为了保持代码的简洁性,释放内存的代码被省略了...

8410

动态内存分配函数详解[4]:free()

byte轻骑兵

系统会维护一个 “空闲内存块链表”,所有被free()释放的块都会被加入该链表。当后续调用malloc()时,会先遍历该链表寻找合适的空闲块(而非直接向系统申请...

11710
领券