c语言最小最大堆的实现
时间: 2024-11-03 17:22:48 浏览: 15
在C语言中,最小最大堆是一种特殊的树形数据结构,主要用于实现优先队列。它通常分为最小堆(小顶堆),用于存储元素值总是非递减的,和最大堆(大顶堆),元素值总是非递增的。
以下是C语言中最小最大堆的一种简单实现:
1. **最小堆**(也称二叉堆)实现:
- 使用数组表示堆,因为数组的索引操作更高效。
- 父节点的位置通过索引计算得出:`parent(i) = (i - 1) / 2`
- 子节点位置:`left_child(i) = 2 * i + 1` 和 `right_child(i) = 2 * i + 2`
- 插入新元素时,将其添加到数组末尾,然后调整堆,保证根节点满足堆的性质(小于等于其子节点)。
- 删除堆顶元素时,将最后一个元素移动到堆顶,然后调整堆,保持堆的属性。
2. **最大堆**实现类似,只是调整条件相反,即根节点总是大于等于其子节点。
```c
#include <stdio.h>
#define MAX_HEAP_SIZE 100
void min_heapify(int arr[], int n, int i) {
int smallest = i;
int left = 2 * i + 1;
int right = 2 * i + 2;
if (left < n && arr[left] < arr[smallest])
smallest = left;
if (right < n && arr[right] < arr[smallest])
smallest = right;
if (smallest != i) {
swap(&arr[i], &arr[smallest]);
min_heapify(arr, n, smallest);
}
}
// 添加元素到堆、删除堆顶元素等操作在此基础上扩展
```
阅读全文