数据结构 -- 优先队列和堆排序

本文介绍了优先队列的概念,包括主要操作如插入、删除最小/最大元素,并讨论了其在数据压缩、最短路径算法等场景的应用。接着详细阐述了堆的性质和二叉堆,包括最大堆和最小堆的定义,以及堆排序的原理。最后,通过Java中的PriorityQueue展示了如何在实际编程中使用优先队列。
摘要由CSDN通过智能技术生成

什么是优先队列? 

        听这个名字就知道,优先队列也是一种队列,只不过不同的是,优先队列的出队顺序是按照优先级来的;在有些情况下,可能需要找到元素集合中的最小或者最大元素,

        可以利用优先队列ADT来完成操作,优先队列ADT是一种数据结构,它支持插入和删除最小值操作(返回并删除最小元素)或删除最大值操作(返回并删除最大元素)。

        这些操作等价于队列的enQueuedeQueue操作,区别在于,对于优先队列,元素进入队列的顺序可能与其被操作的顺序不同,作业调度是优先队列的一个应用实例,它根据优先级的高低而不是先到先服务的方式来进行调度

                   

      如果最小键值元素拥有最高级的优先级,那么这种优先队列叫作升序优先队列(即总是删除最小的元素);

      如果最大键值元素拥有最高级的优先级,那么这种优先队列叫作降序优先队列(即总是删除最大的元素)。

      由于这两种类型时对称的,所以关注一种即可。

 

优先队列的主要操作

  1. insert(key, data):插入键值为key的数据到优先队列中,元素以其key进行排序;

  2. deleteMin/deleteMax:删除并返回最小/最大键值的元素;

  3. getMinimum/getMaximum:返回最小/最大键值的元素,但不删除。

优先队列的辅助操作

  1. 第k最小/第k最大: 返回优先队列中键值为第k个最小/最大的元素

  2. 大小(size):返回优先队列中的元素个数;

  3. 堆排序(Heap Sort):基于键值的优先级将优先队列中的元素进行排序。

优先队列的应用

    数据压缩:赫夫曼编码算法;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值