欢迎来到天天文库
浏览记录
ID:17990850
大小:20.50 KB
页数:5页
时间:2018-09-12
《关于堆顺序存储操作的5种算法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、#include #include typedef int elemType;/************************************************************************//* 以下是关于堆顺序存储操作的5种算法 *//**********************************************************************
2、**//* 定义堆的顺序存储类型 */struct heap{ elemType *heap; /* 定义指向动态数组空间的指针 */ int len; /* 定义保存堆长度的变量 */ int maxSize; /* 用于保存初始化时所给的动态数组空间的大小 */};/* 1.初始化堆 */void initHeap(struct heap *hbt, int ms){ /* 检查ms的值是否有效 */ if (ms <= 0){
3、 printf("数组长度参数非法!"); exit(1); } /* 动态分配存储的数组空间 */ hbt->heap = malloc(ms * sizeof(elemType)); if (hbt->heap == NULL){ printf("空间分配失败!"); exit(1); } /* 设置maxSize域和len域的值 */ hbt->maxSize = ms; hbt->len = 0;
4、 return;}/* 2.清除堆 */void clearHeap(struct heap *hbt){ if5.1-9,,services,andmakethecitymoreattractive,strengtheningpublictransportinvestment,establishedasthebackboneoftheurbanrailtransitmulti-level,multi-functionalpublictransportsystem,thusprotectingthereg
5、ionalpositionandachieve (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{
6、 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)
7、); if (p == NULL){ printf("存储空间分配失败!"); exit(1); } hbt->heap = p; /* 堆数组空间指向新空间 */ hbt->maxSize = 2 * hbt->maxSize; /* 修改数组空间的大小 */ } /* 向堆尾添加新元素 */ hbt->heap[hbt->len] = x; hbt->len++;
8、 /* 用i指向待调整元素的位置,初始指向新元素所在的堆尾位置 */ i = hbt->len - 1; /* 寻找新元素的最终位置,每次使双亲元素下移一层 */5.1-9,,services,andmakethecitymoreattractive,strengtheningpublictransportinvestment
此文档下载收益归作者所有