优先级队列PQ

本文探讨了操作系统的任务调度原理,将电脑比作医院,CPU比作医生,深入讲解了优先级队列的概念及其在任务调度中的应用。文章详细介绍了优先级队列的特性,它是按照优先级而非先进先出(FIFO)原则访问元素的队列。同时,讨论了优先级队列的两种特例——栈和队列,并阐述了优先级队列的基本实现方式:完全二叉堆。通过完全二叉堆,文章进一步解释了如何在保持二叉树结构的同时实现优先级队列的高效操作,如元素的插入和删除。此外,还介绍了建堆和堆排序的过程,包括如何利用Floyd算法在线性时间内构建完全二叉堆。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应用需求:操作系统的任务调度(电脑类比于医院,cpu类比于医生)
问题模型:

在这里插入图片描述

优先级队列:首先它是一个队列,不是FIFO而是按照优先级访问
栈和队列是优先级队列的特例:优先级完全取决于元素的插入次序
在这里插入图片描述
优先级队列的操作
在这里插入图片描述

优先级队列的实现:

在这里插入图片描述

  • 基本实现:完全二叉堆
    vecto/向量/数组不够,树结构过了:折中结合

在这里插入图片描述
基本思路:通过向量表示一颗完全二叉树即完全二叉树,在完全二叉堆的基础上进而实现优先级队列
物理上没有任何改动所有元素仍然构成线性向量,但逻辑上是个完全二叉树,称为完全二叉堆
在这里插入图片描述

在这里插入图片描述
PQ完全二叉树的堆序性
在完全二叉堆所有节点间定义某种次序:任何节点不超过其父亲

PQ即完全二叉堆的元素插入
在这里插入图片描述

PQ即完全二叉堆的元素删除
删除只发生在堆顶(getMax且max一定在堆顶)
破坏结构性—末元素移至堆顶–修复结构性–破坏堆序性—交换并且可能不断逆父子序则不断下降直到大于两个子节点或者成为叶子节点无孩子—这个过程即下滤

建堆

建堆:给n个元素将其组织成堆

堆排序

物理上一系列线性元素逻辑上可以看作完全二叉树
通过Floyd算法 在线性时间 建立完全二叉堆

在这里插入图片描述

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值