数据结构——最小最大堆(C语言)

本文详细介绍了数据结构中的最小最大堆,包括定义、性质、插入和删除操作。在插入操作中,根据父节点所在层调整数据位置,确保堆的正确性。删除操作则以删除最小元素为例,通过调整保持堆的最小最大性质。
摘要由CSDN通过智能技术生成

一、定义

    最小-最大堆:是一棵完全二叉树,二叉树的各层交替为最小层和最大层,且根节点位于最小层。

    最大层:该层上的节点大于等于以其为根节点的子树上的所有节点。

    最小层:该层上的节点小于等于以其为根节点的子树上的所有节点。

二、性质

  1. 处于最小层节点的关键字值逐层增大,这里是指按树本身节点的联系顺序而非层次遍历的顺序。
  2. 处于最大层节点的关键字值逐层减小。
  3. 所有处于最大层节点的关键字值大于所有处于最小层节点的关键字值。
                                            

三、最小-最大堆的插入操作

    注:堆的层次(深度)编号从1开始,根节点编号也从1开始。

    用min_max_insert()函数将数据item插入到堆中,插入前节点个数i=*n;

   步骤:

  1. 最小-最大堆节点个数i=i+1;并求出节点i的父节点parent=i/2;判断父节点parent处于最大层还是最小层。
  2. 若父节点parent处于最小层:
    1. 当所插入数据item小于父节点parent的关键字值时,把父节点的关键字值赋给当前节点的关键字值,即heap[i]=heap[parent];然后把数据item插入到以parent节点向上到根节点的最小层中,即调用verify_min(heap,parent,item);
    2. 若所插入数据item不小于父节点parent的关键字值时,把数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值