Insert an element into a min heap (No sentinel)———插入无哨兵的最小堆(PTA)
2024-01-03 11:31:34
题目描述:
The program below contains a function?insertIntoHeap( )
?which inserts an element into a min heap/priority queue(最小堆).
Fill in the blanks to complete the function.
完整题解:
#include <stdio.h>
#include <stdlib.h>
//堆是一种特殊的树(1,完全二叉树且每个节点都必须大于等于/小于等于其子树中每个节点的值)
/* Definition of Heap struct */
struct Heap{
int *data; // 堆元素存储空间指针,堆元素按照二叉树顺序存储的方式,
//从data[1]开始存放,data[0]不使用,无哨兵元素
int capacity; // capacity(容量) of heap
int size; // number of heap elements
};
struct Heap* initHeap(int capacity){ // 初始化这个Heap
struct Heap* h;
h = (struct Heap*)malloc(sizeof(struct Heap));
if(!h) return NULL;
h->data = (int*)malloc(sizeof(int)*capacity+1);
if(h->data == NULL){
free(h);
return NULL;
}
h->capacity = capacity;
h->size = 0;
return h;
};
int insertIntoHeap(struct Heap* h, int x){
if( h->size==h->capacity) return 0;
// returns 0 if heap is full. (There is NO fuction like the name "IsFull( )")
int i;
for(i=++h->size; i>1&& x<h->data[i/2]; i/=2)
h->data[i] = h->data[i/2];
h->data[i] = x;
return 1; // success
}
void printHeap(struct Heap* h) {
printf("Heap elements:\n");
for (int i = 1; i <= h->size; i++) {
printf("%d ", h->data[i]);
}
printf("\n");
}
int main(){ /* main仅为示例,实际使用以上代码中两个函数的情况可能有所不同 */
struct Heap *h;
h = initHeap( 5 );
insertIntoHeap(h, 1);
insertIntoHeap(h, 10);
insertIntoHeap(h, 3);
insertIntoHeap(h, 4);
insertIntoHeap(h, 5);
printHeap(h);
return 0;
}
经过实际运行后所填空能够正常运行。
文章来源:https://blog.csdn.net/weixin_73728113/article/details/135326681
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!