堆元素插入
二叉堆一般用数组来表示。例如,根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2。
 因此,第0个位置的子节点在1和2,1的子节点在3和4。以此类推。这种存储方式便于寻找父节点和子节点。
在二叉堆上可以进行插入节点、删除节点、取出值最小的节点、减小节点的值等基本操作。
“最小堆”的定义如下:

typedef struct _otherInfo
{int i;int j;
}OtherInfo;typedef struct _minHeapNode
{int value;OtherInfo otherInfo;
}MinHeapNode, *PMinHeapNode;typedef struct _minPQ {PMinHeapNode heap_array; // 指向堆元素数组int heap_size; // 当前堆中的元素个数int capacity;  //堆数组的大小
}MinHeap, *PMinHeap;

请实现最小堆的元素插入函数:

bool heap_insert_value(PMinHeap pq, int value);
其中 pq指向堆,value 为要插入的堆元素。

int parent(int i){return (i - 1) / 2;
}void swap_node(MinHeapNode *x, MinHeapNode *y){int value;int i, j;value = y->value;i = y->otherInfo.i;j = y->otherInfo.j;y->value = x->value;y->otherInfo.i = x->otherInfo.i;y->otherInfo.j = x->otherInfo.j;x->value = value;x->otherInfo.i = i;x->otherInfo.j = j;return;
}
#include <stdio.h>
#include <stdlib.h>
#include "minbinheap.h"bool heap_insert_value(PMinHeap pq, int value){//小根堆,子树关键字大于等于根的关键字 //if(pq->heap_size == pq->capacity - 1) return false;int i, j;i = pq->heap_size;j = parent(i);pq->heap_array[i].value = value;while(i){if(value < pq->heap_array[j].value){swap_node(&(pq->heap_array[i]), &(pq->heap_array[j]));i = j;j = parent(i);}else{pq->heap_size++;return true;}}
}

堆元素插入 二叉堆一般用数组来表示。typedef struct _otherInfo{ int i; int j;}OtherInfo;-icoding-C-数据结构相关推荐

  1. 二叉堆时间复杂度 php,二叉堆(Binary Heap)

    二叉堆这个数据结构有点意思,自己做了个总结,内容结构如下: 二叉堆性质 二叉堆操作 应用 二叉堆性质: 堆(Heap)是一个可以被看成近似完全二叉树的结构,具有完全二叉树的特性: 缺少的叶子节点总是位 ...

  2. java二叉堆_为什么二叉堆利用数组存储?

    堆 逻辑结构最大的优势就在于,通过数组,目标index 能推算出 父子指针的定位. 所以在上下heaptify的时候可以直接找到对应位置进行交换等操作. 现有语言里比如Java,C,C+:以java为 ...

  3. java 二叉堆 建立_二叉堆创建算法以及 java源程序

    java程序实现: 主要的功能函数: public static int left(int i){ return 2*i+1; } public static int right(int i){ re ...

  4. 二叉堆的节点插入、删除以及构建过程

    目录 什么是二叉堆 二叉堆的基本操作 1.插入节点 2.删除节点 3.构建二叉堆 代码实现 什么是二叉堆 定义:二叉堆,本质上是一种完全二叉树. 分类:二叉堆分为最大堆和最小堆两种类型,最大堆和最小堆 ...

  5. 大根堆的删除c语言,二叉堆(一)之 C语言详解

    本文介绍二叉堆,二叉堆就是通常我们所说的数据结构"堆"中的一种.和以往一样,本文会先对二叉堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现: ...

  6. 排序算法之——优先队列经典实现(基于二叉堆)

    许多应用都需要处理有序的元素,但有时,我们不要求所有元素都有序,或是一定要一次就将它们排序,许多情况下,我们会收集这些元素里的最大值或最小值. 这种情况下一个合适的数据结构应该支持两种操作:插入元素. ...

  7. java 二叉堆_二叉堆(三)之 Java的实现

    概要 前面分别通过C和C++实现了二叉堆,本章给出二叉堆的Java版本.还是那句话,它们的原理一样,择其一了解即可. 二叉堆的介绍 二叉堆是完全二元树或者是近似完全二元树,按照数据的排列方式可以分为两 ...

  8. 数据结构之优先队列--二叉堆(Java实现)

    前言 数据结构队列的学习中,我们知道队列是先进先出的.任务被提交到队列中,按照先进先出的原则 对各个任务进行处理.不过在现实的情况下,任务通常有着优先级的概念,例如短任务.管理员的操作 应该优先执行. ...

  9. 《恋上数据结构第1季》二叉堆原理及实现、最小堆解决 TOP K 问题

    二叉堆 BinaryHeap 堆(Heap) 堆的出现 堆简介 二叉堆(Binary Heap) 获取最大值 最大堆 - 添加 最大堆 - 添加优化 最大堆 - 删除 replace 最大堆 - 批量 ...

最新文章

  1. 某金融产品妹纸:四种姿势教你跪舔程序员不要不要的
  2. 用 ABAP 读取本地文本文件内容试读版
  3. myeclipse搭建php,MyEclipse配置JDK类库的简易流程
  4. android实现电话功能实验报告,安卓开发实验报告-20210407005833.docx-原创力文档
  5. java初学者定远期目标_JAVA题,新手求解
  6. ubuntu16.04caffe训练mnist数据集
  7. 10 PP配置-生产主数据-工作中心相关-定义工作中心公式
  8. linux的xampp单独启动mysql,linux的xampp重要的文件和目录
  9. 论文 计算机动态网页的制作,毕业论文 动态网页制作学习网站的设计与实现
  10. linux屏蔽海外流量的两种方法
  11. java filewriter写入文件_Java中的写入字符文件类FileWriter
  12. 微信分销系统,你用了吗
  13. SpringBoot+Vue的房屋租赁系统(含前后台)
  14. 屏保程序学中玩(下)
  15. 一文读懂RFID标签和读写器
  16. PHP俄罗斯方块游戏代码,俄罗斯方块游戏,俄罗斯方块游戏编程代码
  17. 计算机的指令集作用,指令集是
  18. SAP中物料采购PO和SA共存情况下的标准价格确定
  19. linux网站如何添加swf支持,linux上查看swf文件.靠谱
  20. 计算机检索的辅助检索方法有,中国知网等文献检索的一般方法.docx

热门文章

  1. Hibernate 对象的三种状态
  2. 今晚包饺子吗?会露馅的那种......
  3. 你这飞机会爆炸吗?航空公司含泪甩卖49元机票,却被超模君挖出秘密!
  4. 2018年最后一个月最值得关注的13个优质公号
  5. 前端又一本升级版图书上市了,听说比第一版还好看
  6. 3 年工作经验程序员应有的技能
  7. 电脑启动后黑屏只有鼠标_电脑加装固态硬盘后出现黑屏或蓝屏解决方案
  8. st link v2引脚连接_ST-Link资料02_ST-Link固件介绍,及固件命名规则
  9. 中求和符号上下标_涨电脑知识:如何在word中编写复杂的公式,写论文必备技能...
  10. java new 面试_java面试30问