赞
踩
本文用C语言实现了堆的基本操作,包括:创建堆、判断堆满/空、插入、删除。虽然在C++的STL中已经分装好了堆数据结构,但是在不少的场合会用到自己写的堆。
用C++更加方便:C++使用堆!
堆分为最大堆和最小堆,本文对最大堆进行了说明,最小堆可模仿写出。
代码:
#include <stdio.h>
#include <stdlib.h>
#define MaxData INT_MAX;//定义最大值
typedef int DataType;
typedef struct HeapStruct *MaxHeap;
struct HeapStruct{
DataType *data;//定义数组
int size;//堆当前元素个数
int capacity;//堆的最大容量
};
//创建最大堆
MaxHeap Creat(int MaxSize){
MaxHeap H=malloc(sizeof(struct HeapStruct));
//第一个位置不作为堆的元素
H->data=malloc((MaxSize+1)*sizeof(DataType));
H->size=0;
H->capacity=MaxSize;
//第一个元素作为标记元素
H->data[0]=MaxData;
return H;
}
//判断堆栈是否满
int IsFull(MaxHeap H){
if(H->size==H->capacity)return 1;
return 0;
}
//判断堆栈是否为空
int IsEmpty(MaxHeap H){
if(H->size==0)return 1;
return 0;
}
数组中 i/2 的位置是父结点的位置,如果比父结点大,就向前移动
//插入元素
void Insert(MaxHeap H,DataType item
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。