上一页 1 2 3 4 5 6 7 ··· 13 下一页
摘要: 1 typedef struct st_rb_node { 2 /** 3 * 本结构体四字节对齐,因而其地址中低位两个bit永远是0。 4 * Linux内核开发人员非常爱惜内存,他们用其中一个空闲的位来存储颜色信息。 5 * parent_color成员实际上包含了父节点指针和自己的颜色信息。 6 */ 7 unsigned long parent_color; 8 #define RB_RED 0 9 #define RB_BLACK 1 10 struct st_rb_nod... 阅读全文
posted @ 2013-04-16 20:48 only_eVonne 阅读(2047) 评论(0) 推荐(0) 编辑
摘要: 转自http://www.cnblogs.com/zhangchaoyang红黑树RB-treeRB-tree是满足以下4个条件的二叉查找树:每个节点不是红色就是黑色根节点为黑色不能存在两个连续的红色节点任一节点至NULL(树尾端)的每一条路径上,所含黑节点的数目必须相同红黑树并不要求左右子树高度差控制在1以内,它的平衡条件比AVL树弱。然而红黑树通常能够导致良好的平衡状态,经验告诉我们,红黑树的平均搜索效率和AV-tree几乎相等,但是其插入节点的开销相对较低,实践中发生旋转的次数相对较少。以下所有操作,在新插入节点后,首先将新节点设为红色。按照二叉查找树的规则插入新节点后,如果新增节点的父 阅读全文
posted @ 2013-04-16 20:44 only_eVonne 阅读(244) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/v_JULY_v/article/details/6530142B树是一种平衡的多路查找树,一般应用在内存与外存需要频繁交换的场合。例如,在一个典型的B树的应用中,要处理的硬盘的数据量很大,无法一次全部装入内存。因此我们会使用B树,并且使B树的阶数 (节点的个数)与硬盘存储的页面大小相匹配,即一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入。为了达到这个目的,每次新建节点时,直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个node只需一次I/O。比如一颗b树的阶数为1 阅读全文
posted @ 2013-04-14 13:25 only_eVonne 阅读(444) 评论(0) 推荐(0) 编辑
摘要: GCC 提供的原子操作gcc从4.1.2以后的版本提供了__sync_*系列的built-in函数,用于提供加减和逻辑运算的原子操作。其声明如下:type__sync_fetch_and_add(type*ptr,typevalue,...)type__sync_fetch_and_sub(type*ptr,typevalue,...)type__sync_fetch_and_or(type*ptr,typevalue,...)type__sync_fetch_and_and(type*ptr,typevalue,...)type__sync_fetch_and_xor(type*ptr,ty 阅读全文
posted @ 2013-04-11 18:35 only_eVonne 阅读(819) 评论(0) 推荐(0) 编辑
摘要: 红黑树和平衡二叉树(AVL树)类似,都是在进行插入和删除操作时通过特定旋转保持二叉查找树的平衡,从而获得较高的查找性能。红黑树和AVL树的区别在于平衡二叉树追求的是全局平衡,而红黑树只追求局部平衡,因此在操作时对红黑树的平衡调整更高效。红黑树并不是严格意义上的左右子树深度差不大于1,但它依然保持平衡,并保持好的查找时间复杂度。自从红黑树出来后,AVL树就被放到了博物馆里。 阅读全文
posted @ 2013-04-09 15:33 only_eVonne 阅读(2033) 评论(0) 推荐(0) 编辑
摘要: 平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉树:它的左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1<=bf<=1;很显然,平衡二叉树是在二叉排序树(BST)上引入的,就是为了解决二叉排序树的不平衡性导致时间复杂度大大下降,那么AVL就保持住了(BST)的最好时间复杂度O(logn),所以每次的插入和删除都要确保二叉树的平衡变换规则:插入实例:{4, 5 ,7, 2, 1, 3, 6}实现代码:#include <stdio.h>#include & 阅读全文
posted @ 2013-04-09 14:09 only_eVonne 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 路由是选择一条数据包传输路径的过程,也就是说主机怎么向目的地发送数据的过程。当TCP/IP主机发送IP数据包时,便出现了路由,且当到达IP路由器时还会再次出现。路由器是从一个物理网向另一个物理网发送数据包的装置,路由器通常被称为网关,它承但着分发数据包的任务。对于发送的主机和路由器而言,必须决定向哪里转发数据包。在决定路由时,IP层查询位于内存中的路由表,然后根据查询规则,进行ip路由。是不是很抽象?先说如何选路: (1)当一个主机试图与另一个主机通信时,IP首先决定目的主机是一个内网还是外网,怎么确定?当然使用网络号。 (2)如果是是同一内网,那就就是直接发送了,这个最简答不过了... 阅读全文
posted @ 2013-04-07 11:45 only_eVonne 阅读(10389) 评论(1) 推荐(1) 编辑
摘要: 二叉树首先是一棵树,每个节点都不能有多于两个的儿子,也就是树的度不能超过2。二叉树的两个儿子分别称为“左儿子”和“右儿子”,次序不能颠倒。如图1是一个简单的二叉树。二叉树的种类一种是满二叉树,除了最后一层的叶子节点外,每一层的节点都必须有两个儿子节点。如图2是一个满二叉树。另一种是完全二叉树,一棵二叉树去掉最后一层后剩下的节点组成的树为满二叉树,最后一层的节点从左到右连续,即所有的结点都连续集中在最左边。这样的树称为完全二叉树。如图3是一棵完全二叉树。满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树二叉树的实现因为一棵树有最多只有两个儿子,所以我们可以用指针直接指向他们。一个节点包括值(d 阅读全文
posted @ 2013-04-06 12:16 only_eVonne 阅读(425) 评论(0) 推荐(0) 编辑
摘要: 无论是链表,栈还是队列,它们都是线性结构的,每个节点的左边最多一个节点,右边也最多一个节点,对于大量的输入数据,线性表的访问时间太慢,不宜使用。这里我要说一种非线性的数据结构,其大部分操作的运行时间平均为O(logn)。我们涉及到的这种数据结构叫做树。在计算机科学中,树是非常有用的抽象概念。我们形象的去描述一棵树,一个家族的老祖可能有两个儿子,这两个儿子一个有一个儿子,一个有三个儿子,像这样发展下去的一个族谱,就是一个树,如图1所示。就像一棵真正的树一样,我们把老祖称为树根,两个字儿是分叉开的两个树枝,这两棵树枝可以继续向下分成N个树枝,循环下去,一直到长出叶子为止。我们把老祖或者树根称为根( 阅读全文
posted @ 2013-04-06 12:08 only_eVonne 阅读(758) 评论(0) 推荐(0) 编辑
摘要: 在Linux下写C/C++程序的程序员,时常与Core Dump相见。在内存越界访问,收到不能处理的信号,除零等错误出现时,我们精心或不精心写就的程序就直接一命呜呼了,Core Dump是Linux仁慈地留下的程序的尸体,帮助程序员们解决了一个又一个问题。有时配置不给力,Linux直接毁尸灭迹,没有了Core文件;又有时,刚好磁盘空间不足,Core文件写不下了。没有Core文件的时候,如何知道程序在什么地方出错了呢?addr2line就在这时派上用场。这是一个示例程序,func函数返回参数a除以参数b的结果。这里使用0作为除数,结果就是程序因为除以0导致错误,直接中断了。 [cpp] view 阅读全文
posted @ 2013-04-03 14:01 only_eVonne 阅读(2092) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 13 下一页