网站大量收购独家精品文档,联系QQ:2885784924

优先队列与堆实验报告.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
优先队列与堆实验报告

一:问题描述 假设某医生看病人的顺序是由病人的病情严重程度来决定。护士按照所有病人来医院的时间顺序给病人编号ID,依次为1,2,3,…,n;并且根据病人的病情严重程度设置Priority值,病越重,Priority的值越小。当医生开始工作时,护士根据病人的Priority值,由小到大依次安排病人看病。试为护士编写程序安排病人看病的先后次序。 概要设计 最小堆的数据结构 template class T class MinHeap //最小堆ADT定义 { private: T* heapArray; //存放堆数据的数组 int CurrentSize;//当前堆中元素数目 int MaxSize; //堆所能容纳的最大元素数目 public: //构造函数,n表示初始化堆的最大元素数目 MinHeap(const int n); //析构函数 virtual ~MinHeap(){delete []heapArray;}; //如果是叶结点,返回TRUE bool isLeaf(int pos) const; //向堆中插入新元素newNode bool Insert(const T newNode); //从堆顶删除最小值 T RemoveMin(); //从position向上开始调整,使序列成为堆 void SiftUp(int position); //筛选法函数,参数left表示开始处理的数组下标 void SiftDown(int left); }; 最小堆:根结点的键值是所有堆结点键值中最小者自下往上调整自上往下调整使关键字小的节点在上 详细设计 算法的具体步骤 所要求最终四则运算表达式求值的关键算法流程图如下图所示: 从下往上调整: 从上往下调整: 插入操作: 整个程序流程图: 输入和输出的格式 输入:请输入权值,换行符换行,以-1结束: 输出:元素个数:所输入元素的个数 1为队列满,0为队列空:给出一个判断 按权值的大小输出编号:按权值从小到大排序 源程序: #includeiostream using namespace std; templateclass T class minheap { private: T* heap; //元素数组,0号位置也储存元素 int size; //最多可容纳的元素个数 int n; //当前堆中的元素个数 void siftdown(const int start,const int end); //自上往下调整,使关键字小的节点在上 void siftup(int start); //自下往上调整 public: minheap(int n=1000); ~minheap(); bool insert(const T x); //插入元素 T removemin(); //删除最小元素 T getmin(); //取最小元素 bool isEmpty() const; //判断堆是否为空 bool isFull() const; //判断堆是否满了 void clear(); //清空 }; templateclass T minheapT::minheap(int m) { size=m; heap=new T[size]; n=0; } templateclass T minheapT::~minheap() { delete []heap; } templateclass T void minheapT::siftup(int start) //自下往上调整 { int j=start,i=(j-1)/2; //i指向j的双亲节点start 是什么 T temp=heap[j]; while(j0) //将其与父节点比较,使其移动到正确位置 { if(heap[i]=temp)//位于正确位置 break; else//交换位置 { heap[j]=heap[i]; j=i; i=(i-1)/2; } } heap[j]=temp; } templateclass T void

文档评论(0)

zhuliyan1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档