¡Diseño de curso de emergencia!
#define MAXWEIGHT 32767 /*Valor de peso máximo permitido*/
#define n 6
typedef char elemtype;
typedef struct
{
char data;
int peso /*ahorrar peso*/
char data; p>
int parent; /*Información del nodo padre*/
int lchild; /*Información del nodo hijo izquierdo*/
int rchild; /* Información del nodo secundario derecho **
}huffnode; /* Tipo de nodo del árbol Huffman**
typedef struct
{
char cd[MAXSIZE ];
int inicio;
} huffcode;
void creathuffmamtree(huffnode ht[])
{
//*construir un árbol de Huffman */
int i,k,l,r,min1,min2
for (i=0;i<; 2*n- 1;i++)
ht[i].parent=ht[i].lchild=ht[i].rchild=0
for (i=n; ;i<2 *n-1;i++) /*Construir árbol de Huffman*/
{
min1=min2=MAXWEIGHT /*Asignar valores iniciales al peso mínimo; y el segundo peso más pequeño* /
l=r=0; /* L y R son las dos posiciones de nodo con el peso más pequeño*/
for (k=0;k <=i-1;k++ )
if (ht[k].parent==0) /* Seleccione el nodo padre como nodo cero*/
if (ht[ k].weight { min2=min1 r=l ; p> min1 =ht[k].peso l= k; } else if (ht[k].peso< min2) { min2=ht[k].peso r=k; p>printf("\ n"); ht[l].padre=i; printf(" lp%d",ht[l].padre); /p> ht[r].parent=i; printf(" rp%d",ht[r].parent=i); peso=ht[l] .peso+ht[r].peso printf(" lw%d",ht[l].peso printf(" rw); %d",ht[r].peso); printf (" iw%d",ht[i].peso=ht[l].peso+ht[r].peso); ht[i].lchild=l; printf(" il%d",l ht[i].rchild=r; /p> printf(" ir%d\n",r); } }< /p> void creatHuffmancode (huffnode ht[],huffcode hcd[]) { /* Algoritmo para encontrar códigos Huffman basados en el árbol de Huffman*/ int i,f,c; huffcode d; for (i=0;i { d.start=n+1; /*Fin de la codificación*/ c=i ht[ 0].parent=6; f=ht[i].parent; while (f. =0) /*Carácter codificado por Huffman inverso*/ { d! =0) /* Codificación inversa de Huffman de hoja a raíz*/ { if (ht[f].lchild==c) {/ * printf("entonces:%d",f);*/ d.cd[--d.start]='1'; /p> { /*printf("elseF:%d",f);*/ d.cd[--d.start]='0'; p>} c=f; /*printf("ht[ f].parent:%d",ht[ f].parent);* / f=ht[f].parent; /* printf("F$%d",f */ } p> hcd[i]=d; /* printf("hcd[i]:%d\n",hcd[i]); > } void printhuffmancode(huffnode ht[],huffcode hcd[]) { //* Salida del código Huffman */ p> int i,k; printf ("shu chu ha fu man bian ma:\n"); i++) /* Caracteres de salida en secuencia*/ { printf(" %c:",hcd[i].data /*Valor del campo de datos del nodo de salida*/); for (k=hcd[i]. start;k<=n;k++) printf("%4c:",hcd[i].hcd [k]) ; /*Codificación de caracteres de salida*/ printf("\n" } } } main() { huffnode ht[50] huffcode hcd[50]; int w; int g; w=7 mientras(w!=4) { printf("\n Huffman\n"); printf("~~~~~~~~~~~~~~ ~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n") ; printf("| |"); printf("\n"); printf("| 1. Construya un árbol de Huffman. |/n"); printf("| 2. Algoritmo para encontrar códigos Huffman basados en el árbol de Huffman. |\n"); printf("| 3 . Salida Huffman codificación. |\n"); printf("| 4. Salir.|\n"); printf("| |"); printf("\n"); printf("------------------------------- ----------------------------------\n"); printf("Por favor ingrese su elección (1,2,3,4):"); scanf("%d",&w); switch(w) { caso 1: { for(j=0;j { p > printf("Por favor ingrese"); scanf("%d",&ht[j].peso } ); creathuffmamtree (ht);break; }. caso 2. createHuffmancode(ht,hcd);break caso 3: {/*for(g=0;g<6;g++) {printf("ht[g].data: scanf("%c); " ,&ht[g ].data);}*/ printhuffmancode(ht,hcd);break;} default:break; }< / p> } } }