rbtree.txt 中insert 操作,为何用2级指针??

2级指针用的还是不熟。心虚。

Inserting data in the tree involves first searching for the place to insert the
new node, then inserting the node and rebalancing ("recoloring") the tree.The search for insertion differs from the previous search by finding the
location of the pointer on which to graft the new node.  The new node also
needs a link to its parent node for rebalancing purposes.Example:int my_insert(struct rb_root *root, struct mytype *data){struct rb_node **new = &(root->rb_node), *parent = NULL;/* Figure out where to put new node */while (*new) {struct mytype *this = container_of(*new, struct mytype, node);int result = strcmp(data->keystring, this->keystring);parent = *new;if (result < 0)new = &((*new)->rb_left);else if (result > 0)new = &((*new)->rb_right);elsereturn FALSE;}/* Add new node and rebalance tree. */rb_link_node(&data->node, parent, new);rb_insert_color(&data->node, root);return TRUE;}Removing or replacing existing data in an rbtree
------------------------------------------------

找到位置,set value。如果是一级指针,data->node 和 parent 肯定可以关联,但是parent(*rb_right, *rb_left) 和data->node 怎么关联,到底是左还是右,这里的逻辑有意思,直接记录你要替换的地址,等会直接把你换掉,所以用2级指针。若用一级指针p,能操作的只有p指向的内存块,无法改变p 存储的地址。

二级指针总结:  1. 你想改变的是什么?内存块还是指针本身。  2. 使用二级指针,基本操作是pp,就是一级指针整个换掉,小心内存泄漏(*pp, &*pp 这两块内存),其中一级指针多为判断条件。

转载于:https://www.cnblogs.com/ashen/p/10075558.html

linux--rbtree 解惑 insert相关推荐

  1. linux笔记本没有insert,无法在Linux中将UTF8插入数据库MySQL(Can not insert UTF8 to Database MySQL in Linux)...

    无法在Linux中将UTF8插入数据库MySQL(Can not insert UTF8 to Database MySQL in Linux) 当创建表时,我已经设置了charset = utf8. ...

  2. win10找不到局域网Linux,技术员解惑win10系统访问不了NAS和linux网络共享的详细办法...

    有经常使用电脑的朋友向我反映win10系统访问不了NAS和linux网络共享的详细办法的问题,然而并是不所有的朋友都会解决win10系统访问不了NAS和linux网络共享的详细办法的问题,因此我就给大 ...

  3. linux mysql 事务_linux下mysql Insert update delete 事务 用户管理

    linux下mysql Insert update delete  事务 用户管理 1.INSERT插入语句格式: INSERT INTO tb_name (字段1, 字段2, ...) VALUES ...

  4. linux和windows中insert语句注意

    注意: linux服务器中 insert into `table` (`id`,`title`,`time`) values (NULL,'',now());可以的 但是在:windows服务器中: ...

  5. 《Linux内核设计与实现》读书笔记(六)- 内核数据结构

    内核数据结构贯穿于整个内核代码中,这里介绍4个基本的内核数据结构. 利用这4个基本的数据结构,可以在编写内核代码时节约大量时间. 主要内容: 链表 队列 映射 红黑树 1. 链表 链表是linux内核 ...

  6. 初探内核之《Linux内核设计与实现》笔记上

    内核简介  本篇简单介绍内核相关的基本概念. 主要内容: 单内核和微内核 内核版本号 1. 单内核和微内核   原理 优势 劣势 单内核 整个内核都在一个大内核地址空间上运行. 1. 简单. 2. 高 ...

  7. Linux内核的红黑树源码实现以及调用

    红黑树可以说是程序员经常遇到的一种数据结构,不管是工作还是面试都会涉及,有时候还会让你写一段红黑树代码. 本文主要是讲Linux中的红黑树,关于红黑树定义参考wiki:https://en.wikip ...

  8. Kernel数据结构移植(list和rbtree)

    主要移植了内核中的 list,rbtree.使得这2个数据结构在用户态程序中也能使用. 同时用 cpputest 对移植后的代码进行了测试.(测试代码其实也是使用这2个数据结构的方法) 内核代码的如下 ...

  9. linux内核中的数据结构

    http://vinllen.com/linuxnei-he-zhong-de-shu-ju-jie-gou/ https://zhuanlan.zhihu.com/p/58087261 https: ...

最新文章

  1. 武汉理工大学计算机复试笔试重要吗,2017武汉理工计算机复试
  2. 线阵相机和面阵相机的区别及应用
  3. Sci-Hub重生了,这回用上了分布式网络
  4. mysql查看存储过程工作记录20130711
  5. 3.2.3 页面置换算法
  6. android8.0更新手机,安卓微信8.0.6正式更新:可发1G大文件、表情互动等多项更新!...
  7. mysql实现主从复制
  8. 代码里经常看见idle,是什么意思
  9. matlab void函数,MATLAB基本函数
  10. redis java 存储对象_安装redis 并把java对象存放在redis中
  11. 基于汇编与c语言的单片机原理及应用答案,基于汇编与C语言的单片机原理及应用...
  12. VS2015密钥 VS2017密钥
  13. 怎样屏蔽浏览器关闭按钮及ALT+F4 快捷键
  14. php xcat createadmin,[BUG]Unable to load class: \App\Command\createAdmin
  15. 如何给mac重做系统
  16. TCP之快重传与快恢复
  17. 计算机页面不稳定怎么办,电脑网速不稳定怎么解决_电脑网速时快时慢的处理方法...
  18. 融汇悦生活赴港递交招股书:母公司依赖症难解,独立性存疑
  19. 【半导体先进工艺制程技术系列】FinFET工艺流程
  20. php反射型xss,利用反射型XSS漏洞,模拟获取登录账户的Cookie

热门文章

  1. 测试面试题,自动化测试与性能测试篇(附答案)
  2. c语言谭浩强ppt课件,编程_C语言学习课件_谭浩强_PPT~1216F.ppt
  3. php 命令行 循环,Linux_批处理的循环效果脚本,第一次运行 执行命令工A 第 - phpStudy...
  4. linux下搭建博客day3-git安装
  5. 不写一行代码,搭建Jenkins+Jmeter+Ant接口自动化框架
  6. 高中同窗被叫“码子”的!如今转行软件测试,不止是年轻,还有拼搏的勇气
  7. a点到b点最短路线有多少条_8下数学培优:几何体上最短路径问题,总结与提升,不一样的感受...
  8. 简单的签到代码_签到功能,用 MySQL 还是 Redis ?
  9. java编程的逻辑 京东,从阿里,京东等大厂面试题中提炼出25道最频繁出现的并发编程难题(附答案)...
  10. how to open files as sudo