C语言数据结构大根堆的建立和删除代码
时间: 2024-10-29 11:12:37 浏览: 30
C语言 数据结构堆排序顺序存储(升序)
在C语言中,大根堆(Max Heap)是一种特殊的二叉树数据结构,其中每个节点的值都大于或等于其子节点的值。建立和删除操作对于实现优先队列等应用非常重要。这里给出一个简单的例子,展示如何创建一个大根堆以及插入和删除元素:
首先,我们需要定义一个结构体表示堆的一个节点,包含值和指向子节点的指针:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
```
接下来是大根堆的基本操作:
**建立大根堆(初始为空)**:
```c
void build_max_heap(Node** heap, int size) {
if (size > 0) {
for (int i = size / 2 - 1; i >= 0; i--)
max_heapify(heap, size, i);
}
}
// 内部函数:调整堆以保持最大堆性质
void max_heapify(Node** heap, int size, int index) {
int largest = index;
int left = 2 * index + 1;
int right = 2 * index + 2;
if (left < size && heap[left]->data > heap[largest]->data)
largest = left;
if (right < size && heap[right]->data > heap[largest]->data)
largest = right;
if (largest != index) {
swap(&heap[index], &heap[largest]);
max_heapify(heap, size, largest);
}
}
```
**插入元素**:
```c
void insert(int value, Node** heap) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->left = NULL;
newNode->right = NULL;
*heap = insert_node(*heap, newNode);
}
Node* insert_node(Node* root, Node* newNode) {
if (root == NULL)
return newNode;
if (newNode->data > root->data)
root->right = insert_node(root->right, newNode);
else
root->left = insert_node(root->left, newNode);
return root;
}
```
**删除堆顶元素(最大值)并调整堆**:
```c
void delete_top(Node** heap) {
if (*heap == NULL) {
printf("Heap is empty.\n");
return;
}
// 移除最大值(堆顶)
Node* temp = *heap;
*heap = (*heap)->left;
free(temp); // 释放堆顶节点
if (*heap != NULL)
max_heapify(heap, size, 0);
}
```
以上代码展示了大根堆的主要操作,注意在实际项目中需要处理内存分配和释放等问题。
阅读全文