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,一经查实,立即删除!

相关文章

c语言sizeof测量字符组长度,C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别...

1&#xff1a;定义时用字符初始化(1)char chs[7] {a, c, 0, z, 3,d}; // 长度为6上式等价于&#xff1a; (2)char chs[7] {a, c, 0, z, 3,d, /0}; // 长度为6也等价于&#xff1a; (3)char chs[] {a, c, 0, z, 3,d, /0 }; // 长度为6但不等价于&#xff1a;(4)char chs[] {…

c语言百文百鸡问题答案,python_百文买百鸡问题

百文买百鸡问题-- 不定方程-- 公鸡5文钱一只&#xff0c;母鸡3文钱一只&#xff0c;小鸡3只一文钱&#xff0c;用100文钱买100只鸡&#xff0c;如何买&#xff1f;-- 列出方程式x y z 1005x 3y z/3 100如何用计算机来算&#xff1f;-- 计算机并不会消元法&#xff0c;但是…

C语言 输出重复序列的序号,如何在FASTA序列中找到反向重复模式?

我是Python和生物信息学的新手,但我正在通过rosalind.info网站学习两种方法.您可以使用后缀树执行此操作.后缀树(见http://en.wikipedia.org/wiki/Suffix_tree)是神奇的数据结构,它使生物信息学中的所有事情成为可能.您可以快速找到多个长序列中的公共子串.后缀树只需要线性时间…

大写汉字转阿拉伯数字c语言,阿拉伯数字转中文数字方法详解(C++实现)

阿拉伯数字与中文数字没有一一对应关系&#xff0c;不存在直接转换的公式化算法&#xff0c;因此需要根据两种数字体系的特点精心构造转换算法。中文计数有一个特点&#xff0c;就是“零”的使用变化多端。阿拉伯数字中数字的权位依靠数字在整个数字长度中的偏移位置确定&#…

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安装eclipse插件,Android SDK安装及Eclipse插件安装.pdf

Android SDK 安装不 Eclipse 插件安装工具的下载开发 Android 需要用到的工具有&#xff1a;集成开发环境 Eclipse &#xff0c;Android 的 SDK 以及Java SDKAndroid SDK 下载地址 &#xff1a;/sdk/index.html点击上图中的红色地址就可以下载Eclipse 下载地址&#xff1a;/dow…

android 添加随意拖动的桌面悬浮窗口,android 添加随意拖动的桌面悬浮窗口

用过新版本android 360手机助手都人都对 360中只在桌面显示一个小小悬浮窗口羡慕不已吧&#xff1f;其实实现这种功能&#xff0c;主要有两步&#xff1a;1.判断当前显示的是为桌面。这个内容我在前面的帖子里面已经有过介绍&#xff0c;如果还没看过的赶快稳步看一下哦。2.使用…

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…

html中表格与字对齐,html – 中心与表格单元格对齐

这是一个很好的起点。HTML&#xff1a;CSS&#xff1a;.containing-table {display: table;width: 100%;height: 400px; /* for demo only */border: 1px dotted blue;}.centre-align {padding: 10px;border: 1px dashed gray;display: table-cell;text-align: center;vertical…

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网络公…

html渐变编织背景,【报Bug】uniapp设置了css渐变背景色编译时会报错

详细问题描述css样式中设置了背景色的话在H5发行编译时会报错&#xff0c;不过在浏览器运行编译时未发生错误。错误日志&#xff1a;[HBuilder] 15:14:32.364 Module build failed (from ./node_modules/postcss-loader/src/index.js):[HBuilder] 15:14:32.365 TypeError: Cann…