问题描述
优先队列priority queue是一种可以用于很多场合的数据结构,应用 堆结构设计并实现一个优先队列。应用该优先队列实现作业的优先调度:
一个作业ti =(si,ei),si为作业的开始时间(进入时间),ei为 作业的结束时间(离开时间)。作业调度的基本任务是从当前在系统中的 作业中选取一个来执行,如果没有作业则执行nop操作。本题目要求的作 业调度是基于优先级的调度,每次选取优先级最高的作业来调度,优先级 用优先数(每个作业一个优先数pi)表征,优先数越小,优先级越高。作 业ti进入系统时,即si时刻,系统给该作业指定其初始优先数pi = ei - si, 从而使越短的作业优先级越高。该优先数在作业等待调度执行的过程中会 不断减小,调整公式为:pi = pi - wi,其中的wi为作业ti的等待时间: wi = 当前时间-si。一旦作业被调度,该作业就一直执行,不能被抢占, 只有当前执行作业指向完成时,才产生下一轮调度。所以可以在每次调度 前动态调整各作业的优先数。
编程实现这样一个作业调度系统。
基本要求
(1)分别以堆、左高树实现优先队列。
(2)作业集合中的各作业随机生成,根据作业的s属性和e属性动态调整 作业队列,不断加入作业,作业结束删除作业。
(3)要对作业调度的结果给出清晰的输出信息,包括:何时作业进入,何 时调度哪个作业,何时离开,每个作业等待多长时间,优先数的动态变化 情况等。