数据结构
文章平均质量分 78
liuzhanchen1987
这个作者很懒,什么都没留下…
展开
-
透彻了解红黑树之二
经过我上一篇博文,“教你透彻了解红黑树”后,相信大家对红黑树已经有了一定的了解。个人觉得,这个红黑树,还是比较容易懂的。不论是插入、还是删除,不论是左旋还是右旋,最终的目的只有一个:即保持红黑树的5个性质,不得违背。再次,重述下红黑树的五个性质:一般的,红黑树,满足一下性质,即只有满足一下性质的树,我们才称之为红黑树:1)每个结点要么是红的,要么是黑的。2)根结点是黑的转载 2012-03-06 16:29:44 · 2540 阅读 · 0 评论 -
线索二叉树的代码实现
线索二叉树的关键点及其难点在于线索树的建立,可以先建立树,然后根据中序遍历(也可以是其他遍历)建立线索树,也可以在插入节点时建立线索二叉树。后者时间复杂度较小,但是需要注意的地方比较多。具体见代码。 ThreadNode.h文件template class ThreadTree;template class ThreadInorderIterator;template clas原创 2012-03-09 09:49:57 · 2357 阅读 · 1 评论 -
最大堆、最小堆、堆排序
最(大)小堆的性质:(1)是一颗完全二叉树,遵循完全二叉树的所有性质。(2)父节点的键值(大于)小于等于子节点的键值(3)在堆排序中我们通常用的是最大堆,最小堆通常用在优先队列中(尚未找到恰当的例子)。堆排序:数组:a[10]={16,14,10,8,7,9,3,2,4,1}可以利用建堆的方式对其进行排序。因为堆是一颗完全二叉树,根据完全二叉树的性质可以得知:对数组进行建堆之后原创 2012-03-10 13:16:51 · 18405 阅读 · 1 评论 -
哈希表
哈希表是种数据结构,它可以提供快速的插入操作和查找操作。第一次接触哈希表时,它的优点多得让人难以置信。不论哈希表中有多少数据,插入和删除(有时包括侧除)只需要接近常量的时间即0(1)的时间级。实际上,这只需要几条机器指令。 对哈希表的使用者一一人来说,这是一瞬间的事。哈希表运算得非常快,在计算机程序中,如果需要在一秒种内查找上千条记录通常使用哈希表(例如拼写检查器)哈希表的速度明显比树快原创 2012-03-27 20:11:47 · 1646 阅读 · 2 评论 -
B+树B—树B*树,
从B 树、B+ 树、B* 树谈到R 树 作者:July、weedge、Frankie。编程艺术室出品。说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。其中B树、B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成。出处:http://blog.csdn.net/v_JULY_v 。 第一节、B树、B+树、B*转载 2012-03-13 21:23:34 · 1150 阅读 · 0 评论 -
B+树B-树B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,原创 2012-03-14 09:23:55 · 803 阅读 · 0 评论 -
排序法系列之七---基数排序法C++代码实现
#include#include#includeusing namespace std;//按照某位数将数字推入到队列中void VecToDeque(vector&vec,queuedeq[],int n){ vector::iterator it; for(it=vec.begin();it!=vec.end();it++) { int itor=(*原创 2012-03-10 22:09:27 · 4293 阅读 · 2 评论 -
后缀表达式实现六则运算
实现后缀表达式的类如下,该类计算的是已经处理好的后缀表达式。#include#include#includeusing namespace std;void StringDevide(string str,int &num,string st1[]){ for(int i=0;i<100;i++) st1[i][0]='\0'; int n=str.size(原创 2012-03-23 15:19:46 · 1433 阅读 · 0 评论 -
利用双向链表实现约瑟夫问题
输入n个数,围城一圈,输入数字m,从第一个数开始数,数到第m个数删除这个数,然后继续数,数到下一个第m个数时,删除该数,直到剩下最后一个数。输出最后一个数。利用双向循环链表实现:LinkNode.h#includeusing namespace std;templateclass LinkNode{public: Type m_data; LinkNode*m_原创 2012-03-25 14:25:49 · 3736 阅读 · 0 评论 -
中缀树转后缀树
对于一个中缀表达式 a+b*c*(d-e/f) 转换成后缀是这样的形式 abc*def/-+后缀表达式是相当有用处的,转换成后缀表达式后求值会简单很多.那么该如何转换呢? 网上关于这方面的资料一搜一大把,每本数据结构的书中都会提及这个算法,在这个算法中,用到 栈 这个数据结构. 1,关键是比较运算符的优先级,谁的优先级高,谁就出现在前面上面的表达式中,有括号的时候括号优先级最高原创 2012-03-24 14:07:41 · 1771 阅读 · 0 评论 -
透彻理解红黑树之四
ok,首先,以下几点,你现在应该是要清楚明白了的:I、红黑树的五个性质:1)每个结点要么是红的,要么是黑的。2)根结点是黑的。3)每个叶结点,即空结点(NIL)是黑的。4)如果一个结点是红的,那么它的俩个儿子都是黑的。5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。II、红黑树插入的几种情况:情况1,z的叔叔y是红色的。情况2:z的叔叔转载 2012-03-06 16:33:21 · 2887 阅读 · 1 评论 -
数据结构中的树
数据结构中为了存储和查找的方便,用各种树结构来存储文件,本章就浅谈一下各种树的表示方法、特点及各自的用途,本章设计的树结构包括:二叉查找树(二叉排序树)、平衡二叉树(AVL树)、红黑树、B-树、B+树、字典树(trie树)、后缀树、广义后缀树。1、二叉查找树(二叉排序树) (图a)二叉查找树是一种动态查找表(图a),具有这些性质:原创 2012-03-06 15:06:04 · 40200 阅读 · 4 评论 -
平衡二叉树——如何实现不平衡二叉树到平衡二叉树
平衡二叉树(解惑)平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉树:它的左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1很显然,平衡二叉树是在二叉排序树(BST)上引入的,就是为了解决二叉排序树的不平衡性导致时间复杂度大大下降,那么AVL就保持住了(B转载 2012-03-06 16:16:54 · 7809 阅读 · 2 评论 -
透彻了解红黑树之三
//一、左旋代码分析 /*----------------------------------------------------------- | node right | / / ==> / / | a right node y | / / / / | b y转载 2012-03-06 16:31:37 · 2268 阅读 · 0 评论 -
透彻理解红黑树之五
首先,各个结点插入与以上的各种插入情况,一一对应起来,如图: 以下的20张图,是依次插入这些结点:12 1 9 2 0 11 7 19 4 15 18 5 14 13 10 16 6 3 8 17的全程演示图,已经把所有的5种插入情况,都全部涉及到了:红黑树的一一插入各结点:12 1 9 2 0 11 7转载 2012-03-06 16:34:41 · 1947 阅读 · 0 评论 -
透彻理解红黑树之六
//file RBTree.h //written by saturnman,20101008。 //updated by July,20110329。 /*----------------------------------------------- 版权声明: July和saturnman对此份红黑树的c++实现代码享有全部的版权, 谢绝转载,侵权必究。 -----------转载 2012-03-06 16:35:52 · 1851 阅读 · 0 评论 -
哈夫曼树
哈夫曼树又称最优树(二叉树),是一类带权路径最短的树。构造这种树的算法最早是由哈夫曼(Huffman)1952年提出,这种树在信息检索中很有用。结点之间的路径长度:从一个结点到另一个结点之间的分支数目。树的路径长度:从树的根到树中每一个结点的路径长度之和。结点的带权路径长度:从该结点到树根之间的路径长度与结点上权的乘积。树的带权路径长度:树中所有叶子结点的带权路径长度之和,转载 2012-03-08 10:22:43 · 1509 阅读 · 0 评论 -
算法导论第十二章——二叉查找树的C++代码实现
二叉排序树(Binary Sort Tree)又称二叉查找树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树;二叉排序树的查找 步骤:若根结点的关键字值等于查找的关键字,成功。 否则,若小于根结原创 2012-03-06 15:14:28 · 4003 阅读 · 4 评论