代码改变世界

随笔分类 - 数据结构

红黑树并没有我们想象的那么难(下)

2013-09-29 16:22 by 捣乱小子, 3521 阅读, 收藏, 编辑
摘要:上、下两篇已经完成, 希望能帮助到大家.红黑树并没有我们想象的那么难(上):http://daoluan.net/blog/?p=2057红黑树并没有我们想象的那么难(下):http://daoluan.net/blog/?p=2112SGI STL map 实现概述根据上一节的红黑树分析, 结合 sgi stl map 的实现, 看看红黑树的源码是如何实现的. 以下主要以代码的注释为主. sgi stl map 底层实现是_Rb_tree类, 为了方便管理,_Rb_tree 内置了_M_header, 用于记录红黑树中的根节点, 最小节点和最大节点. 在插入删除中都会对其进行维护. 找到一. 阅读全文

红黑树并没有我们想象的那么难(上)

2013-09-26 11:01 by 捣乱小子, 38522 阅读, 收藏, 编辑
摘要:<红黑树并没有我们想象的那么难> 上、下两篇已经完成, 希望能帮助到大家. 红黑树并没有我们想象的那么难(上) 红黑树并没有我们想象的那么难(下) 红黑树并没有想象的那么难, 初学者觉得晦涩难读可能是因为情况太多. 红黑树的情况可以通过归结, 通过合并来得到更少的情况, 如此可以加深对红黑树的理解. 阅读全文

《编程珠玑,字字珠玑》读书笔记完结篇——AVL树

2012-04-26 14:34 by 捣乱小子, 12078 阅读, 收藏, 编辑
摘要:写在最前面的 手贱翻开了《珠玑》的最后几章,所以这一篇更多是关于13、14、15章的内容。这篇文章的主要内容是“AVL树”,即平衡树,比红黑树低一个等次。捣乱真惹不起红黑树,情况很复杂;而AVL思路比较清晰。《编程珠玑,字字珠玑》910读书笔记——代码优化更新了,做了点关于“哨兵”的笔记。在这篇文章的末尾,笔者还加了对引用调用的“大彻大悟”。 4篇读书笔记:全在这里 AVL树 学习数据结构... 阅读全文

《编程珠玑,字字珠玑》45678读书笔记——编程技巧

2012-04-06 21:03 by 捣乱小子, 2602 阅读, 收藏, 编辑
摘要:写在最前面的 就像上一篇文章说的,“编程永远是后话”!在有了可靠的问题分析过程和数据结构的选择,能正确运行的“二分搜索”代码出现之前,把其主要的思路先在草稿上实现,即伪代码。但由于伪代码执行结果的不确定性,需要有一个验证的过程。笔者非常不喜欢这个过程,因为这个过程很繁琐,而且推出的结论不一定是正确的(毕竟没有实实在在在机器上运行得到正确的结果),在笔者看来,给一个算法题,知道用什么算法,数据结构,如果能用伪代码实现,离成功已经不远了。 但后来我又反驳了自己的观点(矛盾体啊),理由:至少到目前为止,写的都是小程序、小算法题,验证过程可能已经被潜移默化解决了。实战演练:动态规划矩阵连乘... 阅读全文

《编程珠玑,字字珠玑》1234读书笔记——多路归并排序

2012-03-29 12:49 by 捣乱小子, 4848 阅读, 收藏, 编辑
摘要:写在前面的2012年3月25日买下《编程珠玑》,很期待但不知道它能给我带来什么! 编程珠玑,字字珠玑。但是翻译有点拗口,有时候整句话读下来都不知道在讲什么,多少有点掩饰了珠玑的魅力,真怀疑是不是直接有道翻译了。位图数据结构法在“开篇”的里,讲述了排序的一个问题,大意就是,对一个“最多占n位的(就是n位的整数),随机的,无重复的(互异无序)”的整数序列进行排序,那么这个序列的总长度len#include#include#include#includeusingnamespacestd;#defineMAX10000//总数据量,可修改#defineMAX_ONCE2500//内存排序MAX_ON 阅读全文

哈夫曼压缩算法

2011-12-26 19:41 by 捣乱小子, 28546 阅读, 收藏, 编辑
摘要:编程独白 给你40分钟的时间,你可以思考十分钟,然后用三十分钟的时间来写代码,最后浪费在无谓的调试上;你也可以思考半个小时,彻底弄清问题的本质与程序的脉络,然后用十分钟的时间来编写代码,体会代码如行云流水而出的感觉。在编程过程当中,相信大家都深有体会,在调试上浪费时间,问题出现在下笔之前没有一个系统 阅读全文

(堆的应用)Huffman赫夫曼树的建立

2011-12-15 09:36 by 捣乱小子, 4701 阅读, 收藏, 编辑
摘要:日后的纠正最近才发现自己的代码有问题,也是在后来做另一个有关哈夫曼实验的时候才发现,在代码当中有很多时候是用new来建立一个新的节点,就包括从最小堆中取出权重最小的节点(这个没有错误),根据两个权重最小节点得出新的节点和往最小堆中插入这个新的节点。问题出在后两个,因为在中间那一步就对left和right设置了parent(看了我的代码的就该很清楚了),其实如果这样下去是很繁琐的,因为new来new去,赋值来赋值去,非常容易搞混。我测试了一下,会把一部分孩子(left或者right)的parent指针搞错,所以今天2011-12-17我更新了Huffman哈夫曼代码。另外值得一提的是,网络上我看 阅读全文

基于顺序表哈夫曼树

2011-11-12 10:59 by 捣乱小子, 2045 阅读, 收藏, 编辑
摘要:基于顺序表创建赫夫曼树说明:赫夫曼树在信息传输上有很多的用途,刚刚学习二叉树,就遇上了赫夫曼,在学习算法的时候学到了不少的的东西。代码实现: 1//哈弗曼节点数据结构2structHuffmanNode//数据结构的设计是本赫夫曼的一大败笔,我居然用了里面的很多东西我居然用了指针。3{4intweight;5chardata;6HuffmanNode*leftChild,*rightChild,*parent;7HuffmanNode():leftChild(NULL),rightChild(NULL),parent(NULL){}8HuffmanNode(intelem,HuffmanNod 阅读全文

单链表的释放内存free(delete)的顺序

2011-09-26 12:56 by 捣乱小子, 8191 阅读, 收藏, 编辑
摘要:在单链表中我们在程序的最后加上一个释放内存的方法或者操作,这是一个很好的习惯。但是在销毁过程当中,我遇到了一个问题,那就是释放的顺序应该是怎么样的,刚开始的时候我很思维习惯的用“数据输出”的方法,顺序的将内存释放了,但是出现了内存错误(泄露),百思不其解。后来发现,原来是释放的顺序搞反了,如果顺序释放的话,释放了第一个节点,其后的节点都丢失了,因为其后的节点都是通过头结点来寻找的。下面附上做实验时候的内存释放代码:如果有不对的地方,请大家纠正void Destroy(AddressBook &ab){ Student * temp; Student * del; del = ab.fi 阅读全文