赞
踩
操作系统表明上看着是支持多个应用程序同时运行,事实上是每个时刻只能有一个进程运行,操作系统会调度不同的进程去运行。每个进程都只能运行一个固定的时间,当超过了该时间,操作系统就会暂停当前运行的进程,去调度其它进程来执行。
实现这种进程调度的一种方法是使用队列。开始的时候进程被放在队列的末尾,调度程序将反复提取队列中的第一个进程来执行,直到运行完毕或时间片用完,若进程没有运行完毕则将该进程放入队列的末尾。这种策略不是特别合适,因为可能一些短的进程需要等待很长的时间才能轮流到。一般来说,运行时间短的进程需要尽快的结束。所以那些运行时间短的进程需要比较高的优先权,同样,那些比较重要的进程也需要比较高的优先权。
这种特殊的应用需要一种特殊的队列-----优先队列。可以用二叉堆实现优先队列。
二叉堆与二叉查找树类似,二叉树有两个性质:结构性质和堆序性质。
下面是一棵完全二叉树的数组实现图示:
- vector<Comparable> array;//存储二叉堆的节点
- int currentSize;//当前二叉堆中的节点数目
- bool isEmpty() const;//判断二叉堆是否为空
- const Comparable & findMin() const;//查找最小元素
-
- void insert(const Comparable & x);//插入元素x
- void deleteMin();//删除最小元素
- void deleteMin(Comparable & minItem);//删除最小元素,并以引用的方式返回该最小元素
- void makeEmpty();//清空该二叉堆
- void print() const;//打印该堆元素
-
- void buildHeap();//将元素移动到合适的位置
- void percolateDown(int hole);//下移动
- /****************************************************************
- * 函数名称:insert(const Comparable & x)
- * 功能描述: 删除最小元素
- * 参数列表: 无
- * 返回结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。