java中的数据结构——堆

这里的堆是一种特殊的二叉树,不是java中用关键字new得到的计算机内存中的可用空间。
堆的特点:
1.它是完全二叉树,除了树的最后一层节点不需要是满的,其他的 每层从左到右都完全是满的;
2.通常用一个数组表示;
3.堆中的每个节点都满足堆的条件,即每个节点的关键字都大于或 等于这个节点的子节点的关键字。 堆是完全二叉树的事实说明表示堆的数组中的下标对应的每个单元 都有值。

扩展堆数组 在程序运行过程中,如果插入太多的数据项,超出了堆数组的容 量,可以创建一个新的数组,把数据从就数组中复制到新的数组。 和哈希表的情况不同,改变堆的大小不需要重新排列数据。执行复 制操作的时间是线性的,但是增大数组容量的操作并不会经常发 生,特别是当每次扩展数组容量时,数组的容量都充分的增大了。
在java中,用Vector类对象取代了数组对象,Vector类对象可以动 态的扩展。

效率: 对于有足够多数据的堆来说,向上筛选和向下筛选算法是所有操作 中最耗时的部分,这两个算法的时间都花费在一个循环中,沿着一 条路径重复的向上或向下移动节点,所需的复制次数和堆的高度有 关。
堆是一种树,由它实现的优先级队列的插入和删除时间复杂度都是 O(logN),删除的时间虽然变慢了,但插入的时间快多了。当堆速 度有要求,且有很多插入操作时,可以选择堆来实现优先级队列。

上一篇:java中的排序算法——冒泡排序
下一篇:java中的数据结构——队列

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值