实验七优先队列与堆实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告部分
HUNAN UNIVERSITY 课程实习报告
题目:优先队列与堆
学生姓名廖嘉琦
学生学号 20090820109 专业班级通信一班
指导老师夏艳
完成日期 2010-11-2
一、需求分析
(1)本程序要求利用最小值堆实现一个优先队列。
(2)对于优先队列应该支持如下操作:初始化队列的init操作;获得队列中元素个数的size操作;判定队列是否为空的empty操作;获得队列中最优先的元素的值的top 操作;向队列中插入一个元素的push操作;删除队列中最优先的元素的pop操作。(3)利用优先队列存入所有病人的信息(编号和病情严重程度)。最后利用优先队列获得病人看病的次序。
(4)堆的数组的ID和和Priority由用户通过键盘输入,其取值范围为(0,216)。不对非法输入做处理,即假设输入都是合法的。
(5)在Dos界面输出病人看病的次序。
(6)测试数据
输入
115
2 3
3 5
420
510
-1 -1
输出
2
3
5
1
4
二、概要设计
抽象数据类型
为实现上述程序的功能,应以整数存储用户的输入,以及计算出的结果。
算法的基本思想
(1)根据题目要求,最小值堆采用数组作为物理存储结构,每个元素是一个结构体变量,包含编号ID和病情严重程度Priority值,以Priority进行排序,最后由优先队列获得病人看病的次序。
。
程序的流程
程序由三个模块组成:
(1)输入模块:完成输入结构体数组中每个元素的ID和Priority节点个数,存储在struct patient p[30]中。
(2)处理模块:再定义一个类,将该数组作为参数传给类,使数组变成一个优先队列。
(3)输出模块:屏幕上显示排序后的病人看病次序。
三、详细设计
物理数据类型
题目要求输入的正整数的取值范围在(0,216)之间,为了能够存储,采用C语言中的整型定义变量。在定义一个结构体变量,存储次序和病情程度。
struct patient {
int ID;
int Priority; };
算法的具体步骤算法流程图如下
输入和输出的格式
输入
615
7 3
8 5
920
1010 //输入病人的ID号和Priority
-1 -1 //以-1结束
输出
2
3
5
1
4 //输出病人的次序
四、调试分析
略。
五、测试结果
输入
1115
12 3
13 5
1420
1510
-1 -1
输出
2
3
5
1
4
六、用户使用说明(可选)
1、本程序的运行环境为DOS操作系统,执行文件为正式实验七.exe
2、运行程序时
提示输入病人的ID号和Priority
以-1结束
七、实验心得(可选)
略。
七、附录(可选)
正式试验七.c 主程序
#include
struct patient
{
int ID;
int Priority;
}; //定义一个结构体变量
class minheap
{
private:
struct patient* Heap;
int size;
int n;
void siftdown(int);
public:
minheap(struct patient * h,int num,int max) //包涵该数组、数组元素数目、数组的大小{
Heap=h;
n=num;
size=max;
buildHeap(); //建立一个最小值堆
}
int heapsize() const { return n;} //堆的大小
bool isLeaf (int pos) const
{ return (pos >=n/2)&&(pos int leftchild(int pos) const { return 2*pos+1; } //得到左节点 int rightchild(int pos) const { return 2*pos+2; } //得到右节点 int parent(int pos) const { return (pos-1)/2; } //得到父节点 bool empty() { if(n==0) return true; else return false;} //判定队列是否为空 bool push(const struct patient&); //向队列中插入一个元素 bool pop(struct patient&); //删除队列中最优先的元素bool top(struct patient&); //获得队列中最优先的元素的值 void buildHeap()