Huffman(霍夫曼)编码

来源:互联网 发布:vscode 字体设置 编辑:程序博客网 时间:2024/06/08 07:08
#include<iostream>#include<cmath>#include<string.h>using namespace std;#define  MAX_NODE  200 typedef char** Huffmancode;typedef struct HTNode{unsigned int Weight;unsigned int Parent, Lchild, Rchild;} HTNode;void Create_Huffman(unsigned n, HTNode HT[], unsigned m){unsigned  int  w;   int  k, j;for (k = 1; k <m; k++){if (k <= n){printf("\n Please Input Weight : w = ? ");cin >> w; HT[k].Weight = w;}else  HT[k].Weight = 0;HT[k].Parent = HT[k].Lchild = HT[k].Rchild = 0;}for (k = n + 1; k < m; k++){unsigned w1 = 32767, w2 = w1;int  p1 = 0, p2 = 0;for (j = 1; j <= k - 1; j++){if (HT[k].Parent == 0){if (HT[j].Weight < w1){w2 = w1; p2 = p1;w1 = HT[j].Weight; p1 = j;}else if (HT[j].Weight<w2){w2 = HT[j].Weight;  p2 = j;}}}HT[k].Lchild = p1; HT[k].Rchild = p2;HT[k].Weight = w1 + w2;HT[p1].Parent = k; HT[p2].Parent = k;}}void Huff_coding(unsigned n, HTNode HT[], unsigned m){int  k, sp, fp, p;char *cd;Huffmancode HC;HC = (Huffmancode)malloc((n + 1) * sizeof(char *));cd = (char *)malloc(m * sizeof(char));cd[n] = '\0';for (k = 1; k<n + 1; k++){sp = n; p = k; fp = HT[k].Parent;for (; fp != 0; p = fp, fp = HT[p].Parent) {if (HT[fp].Lchild == p)  cd[--sp] = '0';else     cd[--sp] = '1';}HC[k] = (char *)malloc((n - sp) * sizeof(char));strcpy(HC[k], &cd[sp]);}free(cd);}


1 0
原创粉丝点击