linux基础数据结构
文章平均质量分 92
一根烂笔头
喜欢钻洞的书虫
展开
-
Linux红黑树(二)——访问节点
本篇博文对红黑树节点和树元素的访问的解析!原创 2013-12-08 21:30:15 · 2044 阅读 · 0 评论 -
Linux红黑树(三)——插入节点
性质1. 节点是红色或黑色。性质2. 根是黑色。性质3. 所有叶子都是黑色(叶子是NIL节点)。性质4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)性质5. 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。以上5条,是红黑树“铁”的纪律,任何一条不成立,就不再是一棵红黑树。而红黑树节点的插入会导致原有红黑树中的某些性质不再成立,因此需要对树进行适当的调整(旋转——附带性的改变孩子,改变父亲或者改变颜色)使之依旧是一棵红黑树。下文原创 2013-12-26 11:01:49 · 3340 阅读 · 1 评论 -
Linux红黑树(一)——数据结构
摘要 兹博文探讨四个重点:1、简单介绍红黑树;2、红黑树节点数据结构;3、红黑树节点中父节点指针域和自身节点颜色有机结合;4、定义红黑树和操作树节点父节点指针和节点颜色的接口,包括一系列宏和两个函数。原创 2013-12-08 18:22:06 · 4880 阅读 · 0 评论 -
Linux散列表(一)——操作函数
散列表(又名哈希表)仅仅需要一个包含单一指针的链表头。它是双向链表的变体。它不同于双链表——表头和结点使用相同的结构体——散列表对表头和结点有不同的定义。如下:struct hlist_head { struct hlist_node *first;};struct hlist_node { struct hlist_node *next, **pprev;原创 2013-12-04 20:16:53 · 2048 阅读 · 0 评论 -
Linux散列表(二)——宏
散列表宏承接了双向链表宏的风范,好使好用!1、获取元素(结构体)基址#define hlist_entry(ptr, type, member) container_of(ptr,type,member)#define hlist_entry_safe(ptr, type, member) \ ({ typeof(ptr) ____ptr = (ptr); \ ____ptr ?原创 2013-12-04 20:47:27 · 1761 阅读 · 0 评论 -
Linux双向链表(五)——简单使用示例
针对前面解析的双链表,本文做一个使用实例。正所谓:千言万语,不如举一个好例子!不过,这个例子很简单,只是起到抛砖引玉作用!原创 2013-12-03 16:54:10 · 1339 阅读 · 0 评论 -
Linux双向链表(二)——逻辑判断
双链表判断函数1、判断结点是不是链表head的最后一个结点/** * list_is_last - tests whether @list is the last entry in list @head * @list: the entry to test * @head: the head of the list */static inline int list_is_last原创 2013-11-28 09:48:50 · 1556 阅读 · 0 评论 -
Linux双向链表(四)——宏
通过前第一,二,三篇双向链表的博文,已经对双链表的基础操作函数做了文字与图片的说明。此博文将要展现操作链表的NB的宏,而且这些宏是最常用的操纵链表的接口,几乎是只要有双链表的地方,就有这些操作宏的使用——而且这群hack,对写宏老专业了,写的很漂亮。不信,往下看!1、获取包含此结点的结构体指针/** * list_entry - get the struct for this entry原创 2013-11-30 21:32:06 · 4209 阅读 · 0 评论 -
Linux双向链表(一)——基础操作增、删、改
前言数据结构中的链表在任何教程里面都是放在最前面讲解,这不仅仅体现它的重要性,而且说明了它的基础性。不说是地基,也能说是根葱,顶梁柱。而且在整个内核当中,无处不在。记得在上大学的时候,学习数据结构链表,虽然用它写了很多程序,但是始终不晓得它的重要性在哪,更不知道它到底有何神通,用到何处。向左,向右,向前看,Linux要拐几个弯才来遇见(《遇见》),后来,终于在Linux中明白,有些地方原创 2013-11-26 21:10:10 · 2676 阅读 · 0 评论 -
Linux双向链表(三)——基础操作拓展拆分与捻接
双向链表高级操作在第一篇博文当中讨论的链表操作,是基础的增,删,改!而在本博文当中,将要在前文的基础操作上,封装高级的链表操作API,废话少说,开干!(+)_(+)1、左向移动结点static inline void list_rotate_left(struct list_head *head){ struct list_head *first; if (!list_empt原创 2013-11-29 09:52:00 · 1655 阅读 · 0 评论