/*哈夫曼编码实现HuffmanTree.c*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
float weight; //存放节点的权值
unsigned int parent,LChild,RChild; //指向双亲,孩子节点的指针
}HTNode,*HuffmanTree; //动态分配数组存储哈夫曼树
typedef char **HuffmanCode; //动态分配数组存储哈夫曼编码
void select(HuffmanTree *ht,int n,int *s1,int *s2)
{
int i;
int flag=0; //标志
for(i=1;i<=n;i++)
{/*先找到前两个符合parent为0条件的元素,分别赋值给s1,s2*/
if((*ht)[i].parent!=0)
continue;
if(flag==0)
{
*s1=i;
flag=!flag;
}
else
{
*s2=i;
break;
}
}
for(i=i+1;i<=n;i++)
{/*在剩下的元素中寻找符合parent为0条件的最小的两个元素*/
if((*ht)[i].parent!=0)
continue; //如果不符合条件,直接判断下一个
if((*ht)[*s1].weight>(*ht)[*s2].weight && (*ht)[*s1].weight>(*ht)[i].weight)
*s1=i; //如果在三个元素中索引值为*s1的元素的权是最大的,那么就将它标记为i所对应的元素
else if((*ht)[*s1].weight<(*ht)[*s2].weight &
哈夫曼编码算法实现
最新推荐文章于 2024-06-25 18:31:27 发布