数据结构课程实验报告_实验7优先队列资料.doc

数据结构课程实验报告_实验7优先队列资料.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
HUNAN UNIVERSITY 课程实习报告 题 目: 逆波兰表达式问题 优先队列与堆 学生姓名 学生学号 指导老师 完 成 日 期 2015-5-9 逆波兰表达式问题 实验背景 在工资管理软件,不可避免的要用到公式的定义及求值等问题。对于数学表达式的计算,虽然直接对表达式进行扫描并按照优先级逐步计算,但将中缀表达式转换为逆波兰表达式更容易处理。1 15 2 3 3 5 4 20 5 10 -1 -1 输出: 2 3 5 1 4 Press any key to continue 另一组数据,用于检测,发现正确 六、用户使用说明(可选) 1、本程序的运行环境为DOS操作系统,执行文件为gcd.exe 2、运行程序时 输入:病人的ID号和病情程度,输入-1 -1表示输入结束 输出:输出病人队列 七、附录(可选) 源代码: #includestdio.h #includeiostream using namespace std; #includeiostream 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 minheapT::siftdown(const int start,const int end) //自上往下调整,使关键字小的节点在上,end表示个数 { int i=start,j=2*i+1;//j指向字节点 T temp=heap[i]; while(j=end) { if( (jend) (heap[j]heap[j+1]) ) j++; if(temp=heap[j]) break;//满足条件 else { heap[i]=heap[j]; i=j; j=2*j+1; } } heap[i]=temp; } templateclass T bool minheapT::insert(const T x) { if(n==size) return f

文档评论(0)

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

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

1亿VIP精品文档

相关文档