欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    实验七优先队列与堆实验报告(共7页).doc

    • 资源ID:13944540       资源大小:275KB        全文页数:7页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    实验七优先队列与堆实验报告(共7页).doc

    精选优质文档-倾情为你奉上实验报告部分HUNAN UNIVERSITY课程实习报告题 目: 优先队列与堆 学生姓名 廖嘉琦 学生学号 专业班级 通信一班 指导老师 夏艳 完 成 日 期 2010-11-2 专心-专注-专业一、需求分析(1) 本程序要求利用最小值堆实现一个优先队列。(2) 对于优先队列应该支持如下操作:初始化队列的init操作;获得队列中元素个数的size操作;判定队列是否为空的empty操作;获得队列中最优先的元素的值的top操作;向队列中插入一个元素的push操作;删除队列中最优先的元素的pop操作。(3) 利用优先队列存入所有病人的信息(编号和病情严重程度)。最后利用优先队列获得病人看病的次序。(4) 堆的数组的ID和和Priority由用户通过键盘输入,其取值范围为(0, 216)。不对非法输入做处理,即假设输入都是合法的。(5) 在Dos界面输出病人看病的次序。(6) 测试数据输入1 152 33 54 205 101 1输出23514二、概要设计抽象数据类型为实现上述程序的功能,应以整数存储用户的输入,以及计算出的结果。算法的基本思想(1) 根据题目要求,最小值堆采用数组作为物理存储结构,每个元素是一个结构体变量,包含编号ID和病情严重程度Priority值,以Priority进行排序,最后由优先队列获得病人看病的次序。 程序的流程程序由三个模块组成:(1) 输入模块:完成输入结构体数组中每个元素的ID和Priority节点个数,存储在struct patient p30中。(2) 处理模块:再定义一个类,将该数组作为参数传给类,使数组变成一个优先队列。(3) 输出模块:屏幕上显示排序后的病人看病次序。三、详细设计物理数据类型题目要求输入的正整数的取值范围在(0, 216)之间,为了能够存储,采用C语言中的整型定义变量。在定义一个结构体变量,存储次序和病情程度。struct patientint ID;int Priority; 算法的具体步骤算法流程图如下开始输入病人的ID号和病情程度int a,b; cin>>a>>b;struct patient p30; int i=0;no(a!=-1)&&(b!=-1)yespi.ID=a;pi.Priority=b;i+; cin>>a>> b;minheap dui(p,i,30);Struct patient patient1;J=0;dui.pop(patient1); j+;cout<<patient1.ID<<endl;yesnoJ<i?结束输入和输出的格式输入6 157 38 59 2010 10 /输入病人的ID号和Priority1 1 /以-1结束输出23514 /输出病人的次序四、调试分析略。五、测试结果输入11 1512 313 514 2015 10 1 1 输出23514 六、用户使用说明(可选)1、本程序的运行环境为DOS操作系统,执行文件为 正式实验七.exe2、运行程序时提示输入病人的ID号和Priority以-1结束七、实验心得(可选)略。七、附录(可选)正式试验七.c 主程序#include<iostream.h>struct patientint ID;int Priority; /定义一个结构体变量class minheapprivate: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<n); /判断是否叶节点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() for(int i=n/2-1;i>=0;i-) siftdown(i); /将一个数组按照堆的性质重新建立;void minheap:siftdown(int pos) /往下建立最小值堆while (!isLeaf(pos) int j = leftchild(pos);int rc = rightchild(pos);if (rc<n) && (Heapj.Priority>Heaprc.Priority)j = rc; /先把Heapj设成子树中的较小值if (!(Heappos.Priority>Heapj.Priority) return; /结点若比子树还小,就不必动struct patient temp;temp=Heappos;Heappos=Heapj;Heapj=temp; /交换结点与该子树/swap(Heap, pos, j);pos = j; /把子树设为当前结点,再重复进行,往下建立最小值堆bool minheap: pop(struct patient& it) /删除队列中最优先的元素 if (empty() return false; / 堆是空的 struct patient temp;temp=Heap0;Heap0=Heap-n;Heapn=temp; /把堆中的最小元素与最后一个元素交换/swap(Heap, 0, -n); if (n != 0) siftdown(0); /将第一个元素往后交换it = Heapn; / 返回最小元素 return true;bool minheap:push (const struct patient& val) /向队列中插入一个元素if(n>=size)return false; /堆已满int curr=n+;Heapcurr=val;while(curr!=0)&&(Heapcurr.Priority<Heapparent(curr).Priority)struct patient temp; temp=Heapcurr; Heapcurr=Heapparent(curr); Heapparent(curr)=temp;/swap(Heap,curr,);curr=parent(curr); /按照优先值把元素插入堆中return true;bool minheap:top(struct patient& it)if(n=0) return false ;it=Heap0; /返回第一个元素,即最优先元素return true;void main()cout<<"请输入病人的ID号和病情程度,并以-1结束"<<endl;int a,b;cin>>a;cin>>b;struct patient p30; /定义一个结构体数组 int i=0;while(a!=-1)&&(b!=-1) /如果a和b都不是-1,继续往下pi.ID=a; /对结构体变量的初始化pi.Priority=b;i+; cin>>a;cin>>b; /最后数组中一共有i个值 minheap dui(p,i,30); /建立一个类,使得该数组成为一个堆struct patient patient1;cout<<"病人的排序为:"<<endl;for(int j=0;j<i;j+)dui.pop(patient1);cout<<patient1.ID<<endl; /打印出排序后病人的ID

    注意事项

    本文(实验七优先队列与堆实验报告(共7页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开