ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:80.99KB ,
资源ID:12072021      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12072021.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编写优先队列数据priorityqueue.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编写优先队列数据priorityqueue.docx

1、编写优先队列数据priorityqueue#includeiostream#include stdlib.htypedef int T;#define ERROR 0#define OK 1#define MAX 50typedef struct T *array; int length; int MaxSize;Array;/定义一个数组,用来存放第一次录入的数据。对应有两个函数操作using namespace std;template/定义一种格式,当T改变时,class类型改变,采用class才完成,用最大堆来存取class MaxHeap public : MaxHeap(int M

2、axSize);int Size() return CurrentSize;/求当前堆的元素大小T Max() if (CurrentSize = 0) throw OutOfBounds();return heap1;/求最大的元素void LoadHeap()/遍历整个堆元素 cout输出数据为endl; for(int i=1;i=CurrentSize;i+) coutheapiendl; MaxHeap& Insert( T x);/插入MaxHeap& DeleteMax(T& x);/删除void Initialize(T a, int size);/初始化void heapAd

3、just();/调整private:int CurrentSize, MaxSize;/当前长度和最大长度T *heap; / 元素数组,用堆来存取 ;templateMaxHeap:MaxHeap(int MaxHeapSize)/ 构造函数MaxSize = MaxHeapSize;heap = new TMaxSize+1;CurrentSize = 0;templatevoid MaxHeap:Initialize(T a, int size)/初始化/ 把最大堆初始化为数组a .heap = a;CurrentSize = size;void MaxHeap:heapAdjust()

4、/调整 for (int i = CurrentSize/2; i = 1; i-) T y = heapi; / 子树的根/ 寻找放置y的位置int c = 2*i; / c的父节点是y的目标位置while (c = CurrentSize) / heapc 应是较大的同胞节点if (c CurrentSize &heapc = heapc) break; / 能/ 不能heapc/2 = heapc; / 将孩子上移c *= 2; / 下移一层heapc/2 = y;templateMaxHeap& MaxHeap:Insert(T x)/插入/ 把x 插入到最大堆中if (Current

5、Size = MaxSize)throw NoMem(); / 没有足够空间/为x寻找应插入位置/ i 从新的叶节点开始,并沿着树上升int i = +CurrentSize;while (i != 1 & x heapi/2) / 不能够把x 放入h e a p i heapi = heapi/2; / 将元素下移i /= 2; / 移向父节点heapi = x;return *this;templateMaxHeap& MaxHeap:DeleteMax(T& x)/删除/ 将最大元素放入x ,并从堆中删除最大元素/ 检查堆是否为空if (CurrentSize = 0)throw Out

6、OfBounds(); / 队列空x = heap1; / 最大元素/ 重构堆T y = heapCurrentSize-; / 最后一个元素/ 从根开始,为y 寻找合适的位置int i = 1, / 堆的当前节点ci = 2; / i的孩子while (ci = CurrentSize) / heapci 应是i的较大的孩子if (ci CurrentSize &heapci = heapci) break; / 能/ 不能heapi = heapci; /i = ci; /下移一层ci *= 2;heapi = y;return *this;void InitArray(Array &A)

7、/初始化元素数组 A.array=(T *)malloc(MAX*sizeof(T); A.length=0; A.MaxSize=MAX;void GetArrayKey(Array &A)/输入元素数组的值 cout请输入您数组集合的大小个数n; int key; cout请输入数据endl; for(int i=1;ikey; if(A.length=A.MaxSize) A.array=(T*)realloc(A.array,(A.length+MAX)*sizeof(T); A.array+A.length=key; class OutOfBounds /异常抛出,太麻烦不写publ

8、ic: OutOfBounds() OutOfBounds() ;class NoMem public: NoMem() virtual NoMem() ;/异常抛出,太麻烦不写int main() MaxHeap H(MAX); T x; Array A; InitArray(A); H.LoadHeap(); int choose;/控制选择 while(choose)/菜单选择 cout1.初始化输入数据endl; cout2.插入数据endl; cout3.查找数据endl; cout4.删除数据endl; cout5.遍历数据endl; cout0.退出choose; switch(

9、choose) case 1: GetArrayKey(A);/初始化数据 H.Initialize(A.array,A.length); H.heapAdjust(); break; case 2: /插入元素 cout请输入您想要插入的元素的值x; H.Insert(x); cout插入成功endl;break; case 3:x=H.Max();/求最大元素 cout当前查找最大的元素为:xendl; break; case 4: H.DeleteMax(x);/删除最大元素 cout删除的最大元素为: xendl; break; case 5: H.LoadHeap();break;/

10、遍历整个数组元素 case 0:return 0; return 0;数据结构选择:定义T为INT类型,权值为INT类型,定义一个class,里面一个private T *heap,采用大顶堆的方法实现函数功能,函数实现都是在class里面的public 函数;算法实现: 在class里面实现全部函数,函数定义为public一个初始化initialize(T a, int size),把一个数组直接覆盖掉原来的T *heap,并执行相应的长度变化操作.一个插入Insert( T x):在数组的最尾部插入,插入之后进行大顶堆调整,保证第一个数组元素为最大权值一个删除DeleteMax(T& x):返回第一个数组元素,然后进行大顶堆调整,重新建堆 一个查找最大元素T Max():返回第一个数组元素一个遍历void LoadHeap():采用从头到尾遍历整个数组元素一个求元素数组的长度int Size():返回当前长度总结:由于编写优先队列数据(priority_queue)类型可以用很多种方法实现,而且难度不大,所以在数据结构和C语音的基础上自学了C+,代码才用C+语言描写,函数在class内完成,大顶堆代码在数据结构中稍微调整了一下,整个元素集合封装只可以调用函数访问.测试数据:第一组: 第二组:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1