Red de conocimiento informático - Conocimientos de programación - Programación para encontrar el código Huffman de AADBAACACCDACACAAD

Programación para encontrar el código Huffman de AADBAACACCDACACAAD

#include lt; stdio.hgt; #include lt; stdlib.hgt; #include lt; string.hgt; #include lt; . #define MAX_NUM 1000//Longitud máxima de la cadena. . typedef struct TreeNode { int peso; int id; short isLeaf datos; char bin; . struct TreeNode *parent; struct TreeNode *lChild, *rChild; } TreeNode; typedef struct { char code[MAX_CHAR_KINDS] // Inversión de cadena. . void ReverseStr(char *str) { int i; char c; int longitud = strlen(i = 0; i lt; longitud / 2; i) { c = str[longitud - 1 - i] ; str[longitud - 1 - i] = str[i]; str[i] = c; } } int main() { char str[MAX_NUM]; char pwd[MAX_NUM]; int longitud; //Longitud de la cadena. . int count; //El número de caracteres diferentes. . TreeNode *tree[MAX_CHAR_KINDS]; //Árboles pequeños iniciales. . TreeNode *eachChar[MAX_CHAR_KINDS]; TreeNode *temp, *p; Código *HFCode; int codeBit // Entrada, inicialización. . printf("Cadena de entrada:\n"); get(str); printf("\n"); longitud = strlen(count = 0; . para (i = 0; i lt; longitud; i) { existió = 0; para (j = 0; j lt; contar; j) { if (str[i] == árbol[j]-gt; datos) { tree[j]-gt;weight; existió = 1; break; } } // Si no es un carácter existente, obtiene un nuevo cuadro. .

if (existió == 0) { árbol[recuento] = (ÁrbolNodo *)malloc(tamañode(ÁrbolNodo)); árbol[recuento]-gt; árbol[recuento]-gt; árbol[recuento]-gt; árbol[recuento]-gt; árbol[recuento]-gt; cada Char[recuento] = árbol[recuento]; . contar; } } // Entrada ilegal. . if (count == 0) { printf("¡Sin caracteres!\n"); getch(); return (0 } else if (count == 1) { printf("¡Al menos 2 tipos de caracteres!\n); "); getch(); return (0); } //Burbuja, orden ascendente. . for (i = 0; i lt; contar - 1; i ) { for (j = 0; j lt; contar - 1 - i; j ) { if (árbol[j]-gt; peso gt; árbol[j 1 ]-gt; peso) { temp = árbol[j]; árbol[j] = árbol[j 1]; árbol[j 1] = temp } } } //Generar árbol de Huffman. . for (i = 1; i lt; contar; i) { temp = (TreeNode *)malloc(sizeof(TreeNode)); lChild = árbol[i-1]; ]; temp-gt; padre = NULL; temp-gt; peso = árbol[i-1]-gt; peso árbol[i]-gt; i-1]-gt; bin = '0'; árbol[i] = temp; árbol[i]-gt; j lt; contar - 1; j ) { if (árbol[j]-gt; peso gt; árbol[j 1]-gt; peso) { temp = árbol[j]; ; tree[j 1] = temp; } else { break } } } HFTree = tree[count-1] // Encuentra el código Huffman de cada carácter después de la propagación. .

for (i = 0; i lt; contar - 1; i ) { for (j = 0; j lt; contar - 1 - i; j ) { if (eachChar[j]-gt; peso gt; eachChar[j 1 ]-gt; peso) { temp = eachChar[j]; eachChar[j] = eachChar[j 1]; eachChar[j 1] = temp } } } HFCode = (Código *)malloc(count * sizeof(Código) ); para (i = 0; i lt; contar; i) { temp = eachChar[i]; HFCode[i].data = temp-gt data = 0; ) { HFCode[i].code[codeBit] = temp-gt;bin; temp = temp-gt;parent; codeBit } HFCode[i].code[codeBit] = '\0'; .código); } //Salida. . printf("5s8s15s\n", "char", "count", "código Huffman"); for (i = 0; i lt; count; i) { printf(" 'c'8d15s\n", eachChar[i ]-gt; datos, cada Char[i]-gt; peso, HFCode[i].code } printf("\n"); retorno (0);