C语言快速实现优先队列(排雷)

本文档是个人在C语言中实现优先队列(小顶堆)的过程记录,用以解决实际问题。通过数组表示二叉堆,并详细介绍了如何组织序号、建堆操作以及删除元素的关键步骤,帮助读者理解和避免实现过程中的常见错误。
摘要由CSDN通过智能技术生成

写在前面

  • C语言没有自带常用数据结构的库,所以当需要使用它们处理问题时必须自己实现它们。
  • 解题时快速并正确实现数据结构的ADT可以为我们节省宝贵的时间去解决真正的问题。
  • 本博客本更像是个人的排坑排雷笔记,讲解不全请见谅,但如果对你有一点启发那就再好不过了。

优先队列

为了简单起见,存放数据的结构使用数组。

  1. 组织序号
    我们知道优先队列,也叫大(小)顶堆(默认为二叉堆)。堆是一棵完全二叉树,但实际上我们使用数组并通过组织序号便能够表示它,这依赖于完全二叉树的良好性质。
    为防止以后出错或造成混乱,实现前一定要先确定好如何组织序号:
  • i n d e x = 0 index = 0 index=0 开始存放数据
    s o n = 2 ⋅ d a d + 1 son = 2\cdot dad+1 son=2dad+1

  • i n d e x = 1 index = 1 index=1 开始存放数据(此时数组的第一个位置不要存放元素)
    s o n = 2 ⋅ d a d son = 2\cdot dad son=2dad

    (1)上面的 s o n son son均为左儿子,因为实际情况右儿子可能不存在,而且显然 s o n r i g h t = s o n l e f t + 1 son_{right}=son_{left}+1 s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值