马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <stdlib.h>
#define n 6
#define m 2*n-1
typedef struct
{
int weight;
int lchild,rchild,parent;
}HNode,*Huffmantree;
void inittree(Huffmantree *T)
{
*T=(Huffmantree)(sizeof(HNode)*m); //用顺序存储结构来储存每一个结点
if(!(*T))
{
printf("内存分配失败。\n");
}
else
{
printf("初始化成功");
}
}
void selectmin(Huffmantree T,int k,int p1,int p2)
{
int i;
int small1=10000,small2=10000;
for(i=0;i<k;i++)
{
if(T[i].parent=-1)
if(T[i].weight<small1)
{
small2=small1;
small1=T[i].weight;
p2=p2;
p1=i;
}
else
{
if(T[i].weight<small2)
{
small2=T[i].weight;
p2=i;
}
}
}
}
void creathuffmantree(Huffmantree *T)
{
int i,p1,p2;
for(i=0;i<m;i++) //初始化m个结点
{
T[i]->weight=0;
T[i]->parent=-1;
T[i]->lchild=-1;
T[i]->rchild=-1;
}
for(i=0;i<n;i++) //输入n个叶子结点的权重
{
printf("请输入第%d个权重:",i+1);
scanf("%d",&T[i]->weight);
}
for(i=n;i<m;i++)
{
selectmin(T,i-1,p1,p2);
T[p1]->parent=i;
T[p2]->parent=i;
T[i]->lchild=p1;
T[i]->rchild=p2;
T[i]->weight=T[p1]->weight+T[p2]->weight;
}
}
int main()
{
Huffmantree T;
printf("请创建一棵哈弗曼树:");
inittree(&T);
creathuffmantree(&T);
return 0;
}
@人造人
|