C语言优先队列作用,C语言实现优先队列(priority queue)

堆排序是一个比较优秀的算法,堆这种数据结构在现实生活中有很多的应用,比如堆可以作为一个优先队列来使用,作为一个高效的优先队列,它与堆的结构一样,都有最大优先队列,最小优先队列.优先队列priority queue 是一种用来维护一组元素构成的集合S的数据结构,每一个元素都有一个相关的值,称为关键字(key)。

最大优先队列包含以下操作:

math?formula=INSERT(%20S%2Cx)%20%3A将元素x插入到S的集合中,等价于

math?formula=S%3DS%5Ccup%20%5Cleft%5C%7B%20x%20%5Cright%5C%7D%20

math?formula=MAXIMUM%20(S)%3A%0A返回S中最大元素;

math?formula=EXTRACT-MAX(%20S)%3A%20返回并且删除S中最大元素;

math?formula=INCREASE-KEY(S%2C%20x%2Ckey)%20%3A将元素x的关键字增加到key,要求

math?formula=key%5Cgeq%20x%20

同样的,最小优先队列操作也包括:

math?formula=INSERT(S%2C%20x)%20,

math?formula=MINIMUM(S%20)%20,

math?formula=EXTRACT-MIN(S%20)%20,

math?formula=DECREASE(S%2C%20x%2Ckey)%20。只不过是对最小值进行操作。

在这里主要讨论最大优先队列,其应用很多,在共享计算机作业系统就是,类似于早期的unix主机,管理员root可以设置n个不同的用户,以及各个用户不同的操作权限,从主机那里接出多个终端,每个操作人员(程序员)在自己的工作终端 ,感觉像是自己拥有自己独立的作业主机一样,其实不是,通过一些任务调度来实现,其中就有任务等待执行相关队列,并且有各个任务有着自己优先级,以便确定调度执行具体任务,如果你学过操作系统相关知识,那么应该对系统调度有所了解。

当一个作业被完成或者被中断后,调度器会调用

math?formula=EXTRACT-MAX%20(S)%20来调用所有在队列中等待任务中优先级最高的任务执行,在新任务加入等待任务时会调用

math?formula=INSERT(S%2C%20x)%20加入任务等待队列,当某个任务等待时间过长时可通过

math?formula=INCREASE-KEY(S%2C%20x%2Ckey)%20提高其优先级,从而减少等待时间。

下面是具体实现C程序源码:

#include

#define NAGE_INFINIT -99999

#define parent(i) i/2

#define left(i) 2*i+1

#define right(i) 2*i+2

//get array of A first element

int heap_maximum(int A[]){ return A[0];}

/***********************************************

*

* function max_heapify();

*

* args

*  A[] inttype save elements of heap

*  i index of A

*  heap_size real length of A

*

* ********************************************/

void max_heapify(int A[],int i,int heap_size){

int l,r,largest,temp;

l=left(i);

r=right(i);

if((l<=heap_size)&&(A[l]>A[i]))

largest=l;

else

largest=i;

if((r<=heap_size)&&(A[r]>A[largest]))

largest=r;

if(largest!=i){

temp=A[i];

A[i]=A[largest];

A[largest]=temp;

max_heapify(A,largest,heap_size);

}

}

/*********************************************

*

* function heap_extract_max()

*

* args

*  A[] inttype save elements of heap

*  heap_size inttype the real length of A

*

* return max the parent node value

*

* ******************************************/

int heap_extract_max(int A[],int heap_size){

int max;

if(heap_size<0)

return -1;  //heap underflow

max=A[0];  //parent node the max value of element

A[0]=A[heap_size];

heap_size--;

/**************************************

* dajust binary heap(or tree) to make

* sure heap fo A true every times

*

* ************************************/

max_heapify(A,0,heap_size);

return max;

}

/***********************************************

*

* function heap_increase_key();

*

* args

*  A[] inttype save elemnts of heap

*  i index of A

*  key inserted element

*

* *********************************************/

void heap_increase_key(int A[],int i,int key){

int temp;

if(key

printf("new key is smaller than current key\n");

return;    //over programming

}

A[i]=key;

//p=parent(i);

while ((i>0)&&(A[parent(i)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 自定义progressbar demo,Android 自定义进度条ColorfulProgressbar,原理简单、效果还行...

效果图&#xff1a;demo效果演示演示Demo特性与原生Progress相比&#xff0c;感觉更漂亮一点&#xff0c;可以显示进度值&#xff0c;背景凹凸感明显&#xff0c;进度条效果更加立体。原理说明额&#xff0c;挺简单的。不过感觉我的做法有点复杂了&#xff0c;我先自定义了一个…

android os自动安裝软件,[图]Bliss OS 12进入开发阶段:可在桌面设备上安装Android 10系统...

此外还对电池进行了优化&#xff0c;添加了额外的安全性选项和相关功能&#xff0c;支持大部分主流游戏手柄&#xff0c;兼容ARM / ARM64应用程序。目前Bliss OS 12已经进入早期开发阶段&#xff0c;有望让您在PC上运行最新的Android 10移动操作系统。Bliss OS开发人员说&#…

android+版本升级的时候会清楚数据马,android主进程销毁了,线程会不会也销毁?...

Android Activity 销毁后子线程会不会被GC回收曾想当然地认为页面被finish之后线程会被android 虚拟机的垃圾回收机制回收掉。于是用页面跳转做测试测试代码结果有点意外&#xff0c;页面被销毁后定时器依然在执行。退出应用定时器还在执行。UI线程被结束掉&#xff0c;UI线程里…

mate7安装android o,华为Mate7升级安卓6.0详细教程

来讲一下华为Mate7升级安卓6.0(EMUI4.0)M版本详细图文教程吧&#xff0c;新的一年了&#xff0c;大家都迫不及待的想升级一下EMUI4.0&#xff0c;但是很多朋友都不知道怎样来升级&#xff0c;下面刷机网小编就来给大家仔细说一说吧&#xff0c;教程都在下面己经整理好了&#x…

html自动图片尺寸,关于html:CSS背景图像适合宽度,高度应按比例自动缩放

我有body {background: url(images/background.svg);}期望的效果是该背景图像的宽度等于页面的宽度&#xff0c;高度变化以保持比例。 例如 如果原始图像恰好是100 * 200(任何单位)且正文宽度为600px&#xff0c;则背景图像最终应为1200px高。 如果调整窗口大小&#xff0c;高度…

html定位的所有属性,HTML CSS定位属性详解 嘿嘿嘿

定位属性&#xff1a;Position作用&#xff1a;检索或者设置元素的定位方式“(改变元素位置)定位的步骤&#xff1a;1.给元素添加position属性 证明该元素要做位置变2.确定参照物&#xff01;(通过position的属性值来确定 )3.确定坐标 left right top bottomPosition的属性值&a…

postman响应html,Postman工具——请求与响应(示例代码)

两个内容&#xff1a; Request 请求和 Response 响应&#xff0c;下面就开始了。一、Request 请求Request 请求&#xff0c;我们只介绍常用的四种&#xff1a;GET、POST、PUT、DELETE&#xff0c;其他类型的就不展开介绍了。另外&#xff0c;我们今天测试的项目是基于 RESTful …

2021高考无准考证成绩查询,2021考研没有准考证号怎么查成绩

2021考研没有准考证号怎么查成绩2020-12-10 11:02:14文/徐克达考研初试结束后&#xff0c;大家最关心的就是成绩的事情了&#xff0c;那么考研没有准考证号怎么查成绩呢&#xff1f;下面是小编整理的详细内容&#xff0c;一起来看看吧&#xff01;考研没有准考证号查成绩的方法…

c++ 如何确认网卡为无线网卡_笔记本无线网卡有哪几种 有必要升级吗

无线网卡是很多朋友购买笔记本时容易忽视的部分&#xff0c;相比较处理器、内存、显卡和硬盘&#xff0c;无线网卡几乎不可选&#xff0c;而且很少有厂商提到自家产品采用的无线网卡型号。大家可能遇到过这种情况&#xff1a;为什么手机可以连接到5Ghz&#xff0c;而自己的笔记…

计算机网络专业运动会入场式,运动会入场式解说词(精选10篇)

运动会入场式解说词(精选10篇)在学习、工作生活中&#xff0c;接触并使用解说词的人越来越多&#xff0c;解说词是依靠文字来对事物、事件或人物进行描述的口头说明解说的词。大家知道解说词的格式吗&#xff1f;以下是小编精心整理的运动会入场式解说词(精选10篇)&#xff0c;…

gifcam使用缩小内存_Fedora 上的桌面环境内存占用测试 | Linux 中国

通常&#xff0c;根据功能、外观和其它品质&#xff0c;选择桌面是一件非常个人的偏好。但有时&#xff0c;你选择的桌面环境还会受到硬件限制。-- Troy DawsonFedora 中有 40 多种桌面环境(DE)。每种桌面环境都有自己的优点和缺点。通常&#xff0c;根据功能、外观和其它品质&…

优秀自我简介200字_全球战疫 翰墨传情——东方盛世杯网络公益书画展优秀作品【二】...

​本文纯手打原创&#xff0c;转发请标注出处&#xff01;中国书画爱好者&#xff0c;是中华优秀传统文化的薪火传承者。他们用生命中最美好的时光与最深沉的情感&#xff0c;实践着伟大文化复兴而不自知。——书画家网经过评委的精心评选&#xff0c;“东方盛世杯”2020网络公…

fi sap 凭证冲销 稅_SAP 成本收集器与重复制造配置手册

1&#xff0e;检查产品成本收集器的评估变式OPN22&#xff0e;检查产品成本收集器的成本核算变式OKKN3&#xff0e;确定作业数量的成本核算变式4&#xff0e;内部作业估价的成本核算变式5&#xff0e;定义订单交货的货物接收评估6&#xff0e;定义利润分析码OKG17&#xff0e;定…

要怎么在计算机里清除桌面内存,电脑内存不足怎么办?怎么清理电脑内存?

当电脑内存不足&#xff0c;内存占用高&#xff0c;磁盘空间不够时&#xff0c;我们该如何对电脑进行清理呢&#xff1f;今天我们就一起来看看清理电脑内存的方法&#xff01;一、结束进程中占用内存高的软件1.使用电脑组合键【CtrlShiftEsc】调出任务管理器&#xff0c;在【进…

axios传数组到后台_我是如何让公司后台管理系统焕然一新的

作者&#xff1a;yeyan1996https://juejin.im/post/5c76843af265da2ddd4a6dd0写在前面马上到了金三银四的时间&#xff0c;很多公司开启了今年第一轮招聘的热潮&#xff0c;虽说今年是互联网的寒冬&#xff0c;但是只要对技术始终抱有热情以及有过硬的实力&#xff0c;即使是寒…

学计算机买电脑显卡1605ti够吗,铭瑄GTX1660Ti显卡值得买吗 铭瑄GTX1660Ti终结者显卡评测...

铭瑄GTX1660Ti显卡怎么样&#xff1f;值得买吗&#xff1f;下面小编带来铭瑄GTX1660Ti终结者显卡评测&#xff0c;希望对大家有所帮助。铭瑄GTX1660Ti终结者显卡评测&#xff1a;2019年1月7日&#xff0c;英伟达发布了价格更加实惠的甜品级RTX显卡RTX2060&#xff0c;玩家们对于…

windows无法新建计算机对象,教您activex部件不能创建对象怎么解决

我们有时候在运行ASP程序的时候&#xff0c;会出现提示ActiveX部件不能创建对象&#xff0c;出现这个问题的原因&#xff0c;有可能是服务器系统重装了。那么当我们遇到电脑出现ActiveX部件不能创建对象怎么办&#xff1f;下面&#xff0c;小编给大家准备了activex部件不能创建…

全国计算机三级数据库考试题型,2015年全国计算机三级考试《数据库》测试题及答案...

2015年全国计算机三级考试《数据库》测试题及答案1.假定学生关系是S(S#&#xff0c;SNAME&#xff0c;SEX&#xff0c;AGE)&#xff0c;课程关系是C(C#&#xff0c;CNAME&#xff0c;TEACHER)&#xff0c;学生选课关系是SC(S#&#xff0c;C#&#xff0c;GRADE)。要查找选修 &qu…

七七计算机论文网,qepipnu

标签&#xff1a;长句英语基本单位毕业设计毕业论文杂谈英语毕业论文On the Techniques of Translating English LongSentences如有需要请联系 bstractTranslation is the most important means of communication betweendifferent countries and cultures&#xff0c;in which…

新系统如何测试软件,怎样检测电脑能否升级到最新的Windows11系统?官方检测工具帮你一招搞定!...

日前&#xff0c;微软正式发布了Windows11系统&#xff0c;新的Windows11操作系统不仅采用了全新的居中设计的开始键以及任务栏&#xff0c;同时还取消了Windows8引入的实时磁贴设计&#xff0c;取而代之的是最近文档、应用程序以及单独的搜索界面。再加上Windows11带来的全新的…