![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 88
温人之周.
这个作者很懒,什么都没留下…
展开
-
Linux内核中的链表、红黑树和KFIFO
l链表结构体定义内容如下,定义在 include\linux\types.h 中l其成员就是两个指向list_head的指针,next指向后一个链表节点、prev指向前一个链表节点。链表单独使用并没有太大意义,一般都是嵌入到“宿主结构体”中。代码逻辑不关注list本身,而是利用list,将“宿主结构体”串联起来。链表API在源码中的路径是:include\linux\list.h生产者和消费者模型是计算机编程中最常见的一种模型。原创 2023-07-28 11:07:41 · 7455 阅读 · 0 评论 -
C语言常用的数据转换函数
编程时,经常用到进制转换、字符转换。原创 2023-07-03 19:38:17 · 11157 阅读 · 0 评论 -
Linux内核中红黑树节点的删除原理分析
一、函数简介 红黑树使用时的删除方法在Documentation/rbtree.txt文件内有定义: struct mytype *data = mysearch(&mytree, "walrus"); if (data) { rb_erase(&data->node, &mytree); myfree(data); } 删除红黑树节点调用的是函数: void rb_erase(struct rb_node *victim, struct原创 2022-05-14 16:21:41 · 12335 阅读 · 0 评论 -
Linux内核中红黑树节点的插入原理分析
普通的二叉查找树在极端情况下可退化成链表,此时的增删查效率比较低。平衡的二叉树(如AVL、红黑树等)能较好的解决这个问题。一、红黑树的性质 1,每个结点是红的或黑的 2,根结点是黑的 3,每个叶子结点是黑的 4,如果一个结点是红的,则它的两个儿子都是黑的 5,对每个结点,从该结点到其子孙结点所有路径上的包含相同数目的黑结点二、红黑树结构体的定义红黑树的定义在/include/linux/rbtree.h中实现:struct rb_node { unsigned long原创 2022-05-14 12:20:23 · 12132 阅读 · 0 评论 -
Linux内核中红黑树的使用方法
Linux内核中红黑树的使用方法可以参考:linux/Documentation/rbtree.txt文件。本文的Linux内核以4.1.15版本为例。 红黑树是一种自平衡二叉搜索树,用于存储可排序的键/值数据对。 这与根树不同是用来有效地存储稀疏数组,从而使用长整数索引插入/访问/删除节点)和哈希表(它们没有被排序容易按顺序遍历,并且必须针对特定的大小和 哈希函数,rbtrees可以优雅地扩展存储任意键)。一、调用Linux内核中红黑树API时常用的操作1.1、创建一个新的红黑树 红黑树原创 2022-05-13 14:43:12 · 13105 阅读 · 1 评论 -
非线性数据结构之树形结构
树形结构是一层次的嵌套结构。 一个树形结构的外层和内层有相似的结构, 所以这种结构多可以递归的表示。经典数据结构中的各种树状图是一种典型的树形结构:一颗树可以简单的表示为根, 左子树, 右子树。 左子树和右子树又有自己的子树。如图: 树形结构指的是数据元素之间存在着“一对多”的树形关系的数据结构,是一类重要的非线性数据结构。 在树形结构中,树根结点没有前驱结点,其余每个结点有且只有一个前驱结点。叶子结点没有后续结点,其余每个结点的后续节点数可以是一个也可以是多个。 它具有以下特点: 1原创 2022-05-10 17:03:13 · 12995 阅读 · 0 评论 -
数据结构之线性结构
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 常见的数据结构可分为:线性结构、树形结构 和 图状结构。 线性结构是一个有序数据元素的集合。 常用的线性结构有:数组, 链表,栈 ,队列等。一、数组 数组是是由相同类型的元素(element)的集合所组成的数据结构,分配一块连续的内存来存储。利用元素的下标位置可以计算出该元素对应的存原创 2022-05-10 12:10:00 · 16880 阅读 · 0 评论