摘要: 用数组来实现堆比链式实现简单,这是因为:1)在插入操作中,链式实现需要一个getInsertNode方法去找插入在哪个结点之下,而在数组中,插入结点的位置下标是依次递增的,(完全二叉树)插入操作的向上调整也可以直接根据下标来找父节点(思维和链式一样)2)在删除堆顶的操作中,链式实现把lastNode的值赋给堆顶后,还要去找倒数第二个结点来更新lastNode,而在数组里就不需要,直接根据下标就知道哪个是倒数第二个结点,而且也不需要记录lastNode。删除操作的自上往下调整,左右子节点也可以通过下标来定,这个思路和链式一样,也是用递归,只是改为了下标来移动经过上面的比较和分析,数组怎么去实现已 阅读全文
posted @ 2011-05-17 01:07 jinmengzhe 阅读(4582) 评论(0) 推荐(1) 编辑
摘要: 1,堆的特征1)堆是一颗完全二叉树,这跟前面的二叉树,二叉查找树均不同,这意味着,建堆的时候,堆的插入位置是按顺序固定的2)每个节点小于或等于其左右子节点(最小堆)3)堆中的任意一颗子树也是一个堆,注意概念都是递归定义的2,堆实现的接口为了便于来测试写的堆是否正确,除了实现接口中的操作外,还实现了前面二叉树里面的3种遍历迭代器(用来检测堆是否正确),实现方法完全一样,直接复制过来的,在堆的学习中,不再详述,只实现堆作为堆特有的操作。HeapADTpackage Heap;import Tree.BinaryTreeADT;public interface HeapADT{ public voi 阅读全文
posted @ 2011-05-17 00:35 jinmengzhe 阅读(1109) 评论(0) 推荐(2) 编辑