当前位置:  编程技术>c/c++/嵌入式

基于堆的基本操作的介绍

    来源: 互联网  发布时间:2014-10-13

    本文导语:    我们期望的数据结构能支持插入操作,并能方便地从中取出具有最小或最大关键码的记录,这样的数据结构即为优先级队列。在优先级队列的各种实现中,堆是最高效的一种数据结构。  最小堆:任一结点的关键码均小...

  我们期望的数据结构能支持插入操作,并能方便地从中取出具有最小或最大关键码的记录,这样的数据结构即为优先级队列。在优先级队列的各种实现中,堆是最高效的一种数据结构。
  最小堆:任一结点的关键码均小于或等于它的左右子女的关键码,位于堆顶的结点的关键码是整个元素集合的最小的,所以称它为最小堆。最大堆类似定义。

  创建堆:采用从下向上逐步调整形成堆得方法来创建堆。为下面的分支结点调用下调算法siftDown,将以它们为根的子树调整为最小堆。从局部到整体,将最小堆逐步扩大,直到将整个树调整为最小堆。

  插入一个元素:最小堆的插入算法调用了另一种堆得调整方法siftUp,实现自下而上的上滑调整。因为每次新结点总是插在已经建成的最小堆后面,这时必须遵守与sift相反的比较路径,从下向上,与父结点的关键码进行比较,对调。

  删除一个元素:从最小堆删除具有最小关键码记录的操作时将最小堆的堆顶元素,即其完全二叉树的顺序表示的第0号元素删去,去把这个元素取走后,一般以堆得最后一个结点填补取走的堆顶元素,并将堆的实际元素个数减1.但是用最后一个元素取代堆顶元素将破坏堆,需要调用siftDown算法进行调整堆。

本文代码均以最小堆的实现为例。

代码如下:

#include
#include
usingnamespace std;

constint maxheapsize=100;
staticint currentsize=0;

//从上到下调整堆
void siftDown(int* heap,int currentPos,int m)
{
    int i=currentPos;
    int j=currentPos*2+1;//i's leftChild
int temp=heap[i];
    while(jtemp)
        {
            heap[i]=heap[j];
            i=j;
            j=(i-1)/2;
        }
        elsebreak;
    }
    heap[i]=temp;
}

//构建堆
int* Heap(int*arr, int size)
{
    int i;
    currentsize=size;
    int* heap =newint[maxheapsize];
    assert(heap!=NULL);
    for(i=0;i=0)
    {
        siftDown(heap,currentPos,currentsize-1);
        currentPos--;
    }
    return heap;
}


//增加一个元素
void insert(int* heap,int value)
{
    if(currentsize>=maxheapsize)
    {
        cout


    
 
 

您可能感兴趣的文章:

  • c++ stl multimap基本操作使用技巧详细介绍
  • 菜鸟问基本操作问题啊
  • Mysql服务器登陆,启动,停止等基本操作命令介绍(Linux/Centos环境)
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 两个关于linux基本操作的问题
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Oracle基本操作全记录
  • php中mysql连接和基本操作代码(快速测试使用,简单方便)
  • 请问linux和Unix的操作命令是不是基本一样的?
  • mysql 基本操作
  • MySQL学习笔记2:数据库的基本操作(创建删除查看)
  • 请教Linux操作系统方面启动的基本问题,大侠指教
  • MySQL学习笔记3:表的基本操作介绍
  • php操作mysql数据库的基本类代码
  • Linux下编程有哪本比较好的书可以推荐下呢。本人看过鸟哥的私房菜了,linux基本操作了解了,现在想开始学linux 下的编程 。我以后打算往网络这方面去学习
  • 求助各位:unix基本操作和shell程序题
  • python ElementTree 基本读操作示例
  • JQuery对表单元素的基本操作使用总结
  • c语言实现顺序表的基本操作
  • SQLServer XML数据的五种基本操作 iis7站长之家
  • SQLServer XML数据的五种基本操作
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • c语言链表基本操作(带有创建链表 删除 打印 插入)
  • C语言实现顺序表基本操作汇总
  • jQuery中Dom的基本操作小结
  • 堆基本操作实现最大堆
  • c#文件的I/O基本操作
  • jdbc操作数据库的基本流程详解
  • C#中Linq查询基本操作使用实例
  • JAVA_基本LDAP操作实例
  • 深入SQLite基本操作的总结详解
  • 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等
  • Linux系统(X64)安装Oracle11g完整安装图文教程另附基本操作
  • Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
  • RPM 五种基本的操作方式讲解
  • C++中单链表的建立与基本操作
  • C++二叉树结构的建立与基本操作
  • SQL Server 数据库基本操作语句总结
  • MSSQL 基本语法及实例操作语句




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3