¿Qué es el algoritmo de Huffman?
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef char ElemType;
typedef struct
{
Typedef struct
El algoritmo de Huffman se llama algoritmo de Huffman.
p>
{
ElemType elem;
unsigned int m_weight
unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;
typedef char** HuffmanCode;
typedef int Estado
typedef estructura peso
{
char elem;
unsigned int m_weight;
}Peso; // Guardar información del símbolo
void HuffmanCoding(HuffmanTree * ,HuffmanCode *,Peso *,int);
void Select( HuffmanTree,int,int *,int *);
void OutputHuffmanCode(HuffmanTree,HuffmanCode,int);
p>Estado principal(nulo)
{
HuffmanTree HT;
HuffmanCode HC
Peso *w; /p>
char c; // los símbolos;
int i,n; // el número de elementos
int wei.
printf("ingrese el número de tatuaje del árbol Huffman:" );
scanf("%d",&n
w=(Weight *)malloc(n* ) tamaño de (Peso);
w=(Peso *)malloc(n*)tamaño de (Peso));
for(i=0;i { printf("ingrese el elemento y su peso: "); > p> scanf("%1s%d",&c,& wei w[i].elem=c w[); i].m_weight =wei; } HuffmanCoding(&HT,&HC,w,n); SalidaHuffmanCode(HT,HC ,n); /p> return 1; } void HuffmanCoding(HuffmanTree *HT,HuffmanCode *HC,Weight *w,int n) { int i,m,s1,s2,start, c,f char *cd HuffmanTree p; if(n< =1) return m=2*n-1 (*HT)=(HuffmanTree)malloc((m +1)* tamaño de(HTNode)); for(i=1;i< =n;++i) { (*HT)[i]. (*HT)[i].elem=w[i -1].elem; (*HT)[i].m_weight=w[i-1].p> (*HT)[i].parent=(*HT)[i]. lchild=(*HT)[i].rchild=0; } for(;i<=m;++i) { (*HT)[i].elem='0'; (*HT)[ i].m_weight=(*HT)[i].parent=(*HT )[i].lchild=(*HT)[i].rchild=0 } } for(i=n+1; i<=m;++i) { Seleccionar(*HT,i-1,& amp;s1,&s2); HT)[s1].parent=i; (*HT)[s2].parent=i (*HT)[i].lchild=s1; =s2; (*HT)[i].m_peso = (*HT)[s1].m_peso+(*HT)[s2].m_peso; > (*HC)=(HuffmanCode)malloc(n*sizeof(char*)); cd=(char*)malloc(n*sizeof(char)); cd[n-1]='\0'; for(i=1;i<=n;++i) { inicio=n-1; for(c=i,f=(*HT)[i].parent;f!=0;c=f,f=(*HT)[f ].parent) { if((*HT)[f].lchild==c) cd[--start]='0'; p> else cd[--start]='1' } (*HC)[i]=(char *)malloc((n-start)*sizeof (char)); strcpy((*HC)[i],&cd[inicio] } } } } void Select(HuffmanTree HT,int n,int *s1,int *s2) { int yo; (*s1)=(*s2)=0 para(i=1;i<=n;i++) { if(HT[i].m_weight { if(HT[i].m_peso { (*s2)=(*s1) ; (*s1)=i } En caso contrario (*s2)=i; if(((*s1)==0||(*s2)==0)&&HT[i].parent==0) { if( (* s1)==0) (*s1)=i; si((*s2)==0) { if(HT[ i].m_peso { (*s2)=(*s1); )=i; } else (*s2)=i }// fin si }// if fin } // fin de for }// fin de for if((*s1)>(*s2)) { i=(*s1); (*s1)=(*s2); } Retorno; } void OutputHuffmanCode(HuffmanTree HT,HuffmanCode HC,int n) { int i; printf("\nnúmero-- -elemento---peso---código huffman\n"); (i=1;i<=n;i++) printf("%d %c %d %s\n",i,HT[i].elem,HT[i].m_weight, HC[i]);