摘要: 堆是一棵被完全填满的二叉树。底层可以例外。也成为完全二叉树。 因为完全二叉树很有规律,所以可以用一个数组表示而不需要使用链。 对于任一个位置i上的元素,左儿子在2i上,右儿子在2i+1上。其父亲在i/2上。 堆的某个结点,必须必它的子孙结点都小,所以堆是完全二叉树,但是完全二叉树不一定是堆。 /... 阅读全文
posted @ 2017-01-10 22:35 肥宝游戏 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 上一章的内容:散列1:分离链接法 对于List和Vector,都是使用自己实现的简单模板。Vector模板的实现 List模板的实现 散列表的填装因子(load factor)λ为散列表中的元素个数和散列表大小的比值。 探测散列表:在找到位置后,发现已经有数据,继续找下一个,直到找到位置。... 阅读全文
posted @ 2017-01-10 17:53 肥宝游戏 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 散列: 将每个键映射到从0到TableSize-1这个范围的某个数,并将其放到适当的单元中。这个映射成为散列函数 理想情况下,不同的键映射到不同的单元,但是现实中是不可能的,所以好的散列函数,应该尽量均匀地分配键。 列表的大小最好是素数,这个非常非常重要。 解决冲突: 冲突:如果一个元素插入... 阅读全文
posted @ 2017-01-10 17:33 肥宝游戏 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 伸展树(splay tree):也叫分裂树,当一个结点被访问后,它就要经过一系列AVL树的旋转被推到根上。 M叉树:可以有M路分支,高度大约是logmN B树:经过M叉树的多次变种和改进。有如下特性: 1.数据项存储在树叶上 2.非叶结点存储知道M-1个键,以指示搜索的方向;键i代表子树... 阅读全文
posted @ 2017-01-10 10:36 肥宝游戏 阅读(422) 评论(0) 推荐(0) 编辑
摘要: AVL树是每个结点的左子树和右子树的高度最多差1的二叉查找树。 要维持这个树,必须在插入和删除的时候都检测是否出现破坏树结构的情况。然后立刻进行调整。 看了好久,网上各种各种的AVL树,千奇百怪。 关键是要理解插入的时候旋转的概念。 //// AvlTree.h// HelloWorld//... 阅读全文
posted @ 2017-01-10 00:27 肥宝游戏 阅读(136) 评论(0) 推荐(0) 编辑