“ Ctrl AC!一起 AC!”
目录
堆
概述:
最大堆
抽象数据类型描述:
初始化:
typedef struct HeapStruct* MaxHeap;
struct HeapSturct{
ElementType* Elements;
int Size;
int Capacity;
};
MaxHeap Create(int MaxSize){
MaxHeap H=malloc(sizeof(struct HeapStruct));
H->Elements=malloc((MaxSize+1)*sizeof(ElementType));
H->Size=0;
H->Capacity=MaxSize;
H->Elements[0]=MaxData;
return H;
}
插入:
void Insert(MaxHeap H,ElementType item){
int i;
if(IsFull(H)){
printf("满了");
return;
}
i=++H->Size;
for(;H->Elements[i/2]<item;i/=2){
H->Elements[i]=H->Elements[i/2];
}
H->Elements[i]=item;
}
删除最大值:
ElementType DeleteMax(MaxHeap H){
int Parent,Child;
ElementType MaxItem,temp;
if(IsEmpty(H)){
printf("最大堆以为空");
return;
}
MaxItem=H->Elements[1];
temp=H->Elements[H->Size--];
for(Parent=1;Parent*2<=H->Size;Parent=Child){
Child=Parent*2;
if((Child!=H->Size)&&(H->Elements[Child]<H->Elements[Child+1])) Child++;
if(temp>=H->Elements[Child]) break;
else H->Elements[Parent]=H->Elements[Child];
}
H->Elements[Parent]=temp;
return MaxItem;
}
建立:
哈夫曼树
概述:
构造:
特点:
集合
查找:
int Find(SetType S[],ElementType X){
int i;
for(i=0;i<MaxSize&&S[i].Data!=X;i++);
if(i>=MaxSize) return -1;
for(;S[i].Parent>=0;i=S[i].Parent);
return i;
}
并运算:
感谢阅读!!!
“ Ctrl AC!一起 AC!”