Huffman 编码 数据结构

来源:互联网 发布:淘宝正义哥假货 编辑:程序博客网 时间:2024/04/30 01:52
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
struct ele
{
int value;
int parent;
int Lchild;
int Rchild;
};
void choice(ele *&p,int k,int &s1,int &s2)
{
int i;
int x,y;
int t1,t2;
x=y=1000;
for(i=1;i<k;i++)
{
if(p[i].parent)
continue;
if(p[i].value<y)
{
y=p[i].value;
t2=i;
if(x>y)
{
swap(x,y);
swap(t1,t2);
}

}
}
s1=t1;
s2=t2;
}
void Huffman(ele*&p,int n)
{
if(n<=1)
return ;
else
{
int i,s1,s2;
int m=2*n-1;
p=(ele*)malloc(sizeof(ele)*(m+1));
for(i=1;i<=m;i++)
p[i].parent=p[i].Lchild=p[i].Rchild=0;
for(i=1;i<=n;i++)
scanf("%d",&p[i].value);
for(i=n+1;i<=m;i++)
{
choice(p,i,s1,s2);
p[i].value=p[s1].value+p[s2].value;
p[s1].parent=p[s2].parent=i;
p[i].Lchild=s1;
p[i].Rchild=s2;
}
}
}
int main()
{
int n;
ele *p;
scanf("%d",&n);
Huffman(p,n);
for(int i=1;i<=2*n-1;i++)
printf("%d\n",p[i].value);
return 0;
}
0 0
原创粉丝点击