您的位置:首页 > 编程语言 > C语言/C++

Huffman学习记录 c语言

2015-12-07 17:51 423 查看
#include<stdio.h>

struct point
{
int size;
int Fa;
int zuo;
int you;
}arr[100];

void New(int i,int a,int b,int A,int B)
{
arr[A].Fa=i;
arr[B].Fa=i;
arr[i].size=arr[A].size+arr[B].size;
arr[i].zuo=A;
arr[i].you=B;

}

void build(int n)
{
int a,b,i ,j,m,A,B;

for(i=1;i<=100;i++)
{
arr[i].Fa=0;
}

m=2*n-1;

for(i = n+1; i<=m;i++)
{
a=9999;b=9999;
for(j=1 ; j <= i-1 ; j++)
{
if(arr[j].Fa==0 && arr[j].size < a)//找两个最小的数
{
a = arr[j].size;
A=j;
}
else if(arr[j].Fa==0 && arr[j].size < b)
{
b = arr[j].size;
B=j;
}
}
New(i,a,b,A,B);
}
}

int main()
{
int n,i;

scanf("%d",&n);

for( i = 1 ; i <= n ; i++)
{
scanf("%d",&arr[i].size);
}
build(n);

printf("  左孩子  右孩子  父亲节点  大小\n");

for(i=1;i<=2*n-1;i++)
{
printf("i=%d  %d  %d  %d  %d\n",i,arr[i].zuo,arr[i].you,arr[i].Fa,arr[i].size);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: