Codificador/descodificador Huffman
#include lt;stdio.hgt;
#define MAX 1000
#define MAXSYMBS 30 p>
#define MAXNODE 59
typedef struct
{
int peso;
int bandera
int padre;
int lchild;
}huffnode;
estructura typedef
{
int bits[MAXSYMBS];
int inicio;
}huffcódigo
main()
{ p>
huffnode huff_node[MAXNODE];
huffnode huff_code[MAXSYMBS], cd;
int i, j, m1, m2, x1, x2, n, c, p ; p>
char symbs[MAXSYMBS], symb;
clrscr();
printf("ingrese el número de hoja del árbol:\n") ;
scanf("d",amp; n);
for (i=0; ilt; 2*n-1; i)
{
buff_node[i].weight=0
buff_node[i].parent=0
buff_node[i].flag=0; > p>
buff_node[i].lchild=-1;
buff_node[i].rchild=-1
}
printf( " ingrese el peso de cada hoja\n");
for (i=0;ilt;n;i)
scanf("d",amp;huff_node[i ] .peso);
for (i=0; ilt; n-1; i )
{
n1=m2=MAX;
x1=x2=0;
for (j=0; jlt; n i; j )
{
if (huff_node[j] pesolt;m1amp;amp;huff_node[j].flag==0)
{
m2=m1;
x2=x1;
m1=huff_node[j].weight
x1=j
}
else if (huff_node[j].weightlt; m2amp ; amplificador
;huff_node
[j].flag==0)
m2=huff_node[j].weight;
x2=j;
}
}
huff_node[x1].parent=n i
huff_node[x2].parent=n i; huff_node[x1].flag=1;
huff_node[x2].flag=1;
buff_node[n i].weight=buff_node[x1].weight buff_node
[x2].peso
buff_node[n i].lchild=x1
buff_node[n i].rchild=x2
}
p> p>for (i=0;ilt;n;i)
{
cd.start=n;
c=i ;
p=huff_node[c].parent;
while(p!=0)
{
if (huff_node[ p] .lchild==c)
cd.bits[cd.start]=0
else
cd.bits[cd.start]= 1;
cd.start=cd.start-1;
c=p
p=huff_node[p].padre;
}
cd.start;
para (j=cd.start; jlt; =n; j)
huff_code[i].bits [j ]=cd.bits[j];
huff_code[i].start=cd.start;
}
puts("el código hafman son: ");
for (i=0; ilt; n; i )
{
for (j=huff_code[i].start; jlt; =n; j )
printf("10d, huff_code[i].bits[j]");
printf("\n");
}
puts("presione cualquier tecla para salir...");
getch()
}
Joseph Ring
#includelt; stdio.hgt;
nodo de estructura typedef
{int num
nodo de estructura *next;
}lista de enlaces;
lista de enlaces *creat(head, n)
lista de enlaces *head
int
{lista de enlaces *s, *p;
int i;
s=(
lista de enlaces *)malloc(sizeof(lista de enlaces));
head=s;
s-gt; p>
p=s;
s-gt; p>
for(i=2;ilt;=n;i)
{s=(lista de enlaces) *)malloc(sizeof(lista de enlaces));
s-gt ; num=i
p-gt; ;
}
p-gt; next=head
return head; *select(head, m)
lista de enlaces *head
lista de enlaces *select(head, m)
lista de enlaces *head; > p>
int m;
{lista de enlaces *p, *q;
int i, t, n; /p>
p>
t=1;
q=p;
hacer
{p=q-gt;
t=t 1;
if(tn==0)
{printf("4d", p-gt; num); >
q-gt; siguiente=p-gt; siguiente;
libre(p);
}
else q=p; p>
} while(q==p);
cabeza=p;
return(cabeza);
}
main()
{int n, m;
linklist *head;
printf("ingrese el número total\n"); p>
scanf ("d",amp;n);
printf("ingrese el número a llamar:\n");
scanf("d", amp;m);
creat(head, n);
select(head, m
printf("el último: es\n); ", cabeza-gt; num);
}