Chinaunix首页 | 论坛 | 博客
  • 博客访问: 180370
  • 博文数量: 28
  • 博客积分: 30
  • 博客等级: 民兵
  • 技术积分: 954
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-21 10:28
个人简介

站在巨人的肩膀是骗人的

文章分类

全部博文(28)

文章存档

2013年(28)

分类: C/C++

2013-03-23 11:02:58

什么是堆
可能最容易想到的就是堆与栈,一个变量分配在堆还是栈?栈向低地址延伸,堆往高地址延伸。叫栈是因为代码执行时cpu一般需要通过压栈来保存执行上下文(寄存器),而执行完就出栈恢复执行上下文,这是高效的中断式执行。为什么叫堆呢?我大胆猜测一下,内存一块块申请,释放频率较高,有时需要块更大的连续内存,有时需要块小的,造成了内存出现很多碎片,这个地方反复地申请、释放,搞的乱七八糟,索性起名叫堆,一堆堆的,这个堆区别与数据结构的堆。

什么是数据结构的堆
数据结构的堆,是颗完全二叉树,以连续地址存储(vector)。
插入的方式是,先将元素放到vector尾部,然后vector不断和父母节点比较交换,直到找到合适的位置,所以时间复杂度是O(lgN),也就是树的高度。
删除第一个元素的方式是,先将最后的元素跟第一个元素交换,然后将最后的元素删除,然后第一个元素再跟两个孩子节点中的一个交换,直到找到合适的位置,所以时间复杂度也是O(lgN)。

堆的特点
堆是插入、删除时排序,比较适合处理像海量数据中找到前100个这种类似的。也可以用堆实现优先队列。
阅读(2206) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

傻得冒油2013-03-23 15:50:41

哎说你2b了吧...哥来教育教育你。
堆和栈都是一类数据结构,实现方法有很多种,堆区和栈区分别是用这两种数据结构管理起来的内存区域,堆区简称堆,栈区简称栈,此栈非彼栈。