1、上机题目:哈夫曼树的建立算法实现
需求分析:
- 输入参数的格式和合法取值范围:整型,(-32768,32767);
- 输出的格式:printf("%d\t%d\t%d\t%d\t%d\n",q,Huff[q].weight,Huff[q].parent,Huff[q].lchild,Huff[q].rchild);
- printf("½Úµã\tweight\tparent\tlchild\trchild\n");
- 测试数据:{3,7,5,1}
详细设计:
- 构造哈夫曼树
for (i=n+1;i<2*n;i++)
{
a=MAXNODE;
b=MAXNODE;
x=0;
y=0;
for(l=1;l<i;l++)
{
if(Huff[l].parent==-1&&Huff[l].weight<a)
{
b=a;
y=x;
a=Huff[l].weight;
x=l;
}
else
if(Huff[l].parent==-1&&Huff[l].weight<b)
{
b=Huff[l].weight;
y=l;
}
}
-
- 确定存储结构,用三叉链表实现哈夫曼树类型定义
typedef struct
{
int weight;
int parent,lchild,rchild;
}HNodeType,*Huff[MAXNODE+1];
-
- 初始化数组
for (i=1;i<=2*n;i++)
{
Huff[i].weight=0;
Huff[i].parent=-1;
Huff[i].lchild=-1;
Huff[i].rchild=-1;
}
-
- 输出哈夫曼树的HuffNode
printf("½Úµã\tweight\tparent\tlchild\trchild\n");
for(q=1;q<=2*n-1;q++)
{
printf("%d\t%d\t%d\t%d\t%d\n",q,Huff[q].weight,Huff[q].parent,Huff[q].lchild,Huff[q].rchild);
}