- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
#include?stdio.h#include?stdlib.htypedef?int?elemType;/************************************************************************//*????????????????????以下是关于堆顺序存储操作的5种算法?????????????????*//************************************************************************//*?定义堆的顺序存储类型?*/struct?heap{????elemType?*heap;????????/*?定义指向动态数组空间的指针?*/????int?len;????????????/*?定义保存堆长度的变量?*/????int?maxSize;????????/*?用于保存初始化时所给的动态数组空间的大小?*/};/*?1.初始化堆?*/void?initHeap(struct?heap?*hbt,?int?ms){????/*?检查ms的值是否有效?*/????if?(ms?=?0){????????printf(数组长度参数非法! );????????exit(1);????}????????/*?动态分配存储的数组空间?*/????hbt-heap?=?malloc(ms?*?sizeof(elemType));????????if?(hbt-heap?==?NULL){????????printf(空间分配失败! );????????exit(1);????}????/*?设置maxSize域和len域的值?*/????hbt-maxSize?=?ms;????hbt-len?=?0;????return;}/*?2.清除堆?*/void?clearHeap(struct?heap?*hbt){????if?(hbt-heap?!=?NULL){????????free(hbt-heap);????????hbt-heap?=?NULL;????????hbt-len?=?0;????????hbt-maxSize?=?0;????}????return;}/*?3.检查一个堆是否为空?*/int?emptyHeap(struct?heap?*hbt){????if?(0?==?hbt-len){????????return?1;????}else{????????return?0;????}}/*?4.向堆中插入一个元素?*/void?insertHeap(struct?heap?*hbt,?elemType?x){????int?i;????/*?堆满时数组空间扩展为原来的2倍,???????原内容被自动拷贝到p所指向的存储空间中*/????if?(hbt-len?==?hbt-maxSize){????????elemType?*p;????????p?=?realloc(hbt-heap,?2?*?hbt-maxSize?*?sizeof(elemType));????????if?(p?==?NULL){????????????printf(存储空间分配失败! );????????????exit(1);????????}????????hbt-heap?=?p;????????/*?堆数组空间指向新空间?*/????????hbt-maxSize?=?2?*?hbt-maxSize;????????/*?修改数组空间的大小?*/????}????/*?向堆尾添加新元素?*/????hbt-heap[hbt-len]?=?x;????hbt-len++;????/*?用i指向待调整元素的位置,初始指向新元素所在的堆尾位置?*/????i?=?hbt-len?-?1;????/*?寻找新元素的最终位置,每次使双亲元素下移一层?*/????while?(0?!=?i){????????int?j?=?(i?-?1)?/?2;????????/*?j指向下标为i的元素的双亲?*/????????/*?比较调整结束退出循环?*/????????if?(x?=?hbt-heap[j]){????????????????????break;????????}????????hbt-heap[i]?=?hbt-heap[j];????????/*?双亲元素下移?*/????????i?=?j;????}??
文档评论(0)