Buscar respuestas a preguntas de práctica en el conjunto de preguntas de estructura de datos (versión en lenguaje C)

Codificador/descodificador Huffman

#include lt;stdio.hgt;

#define MAX 1000

#define MAXSYMBS 30

#define MAXNODE 59

typedef struct

{

int peso;

int bandera

int padre;

int lchild;

}huffnode;

estructura typedef

{

int bits[MAXSYMBS];

int inicio;

}huffcódigo

main()

{ huffnode huff_node[MAXNODE];

huffnode huff_code[MAXSYMBS], cd;

int i, j, m1, m2, x1, x2, n, c, 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);

}