电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

C语言哈夫曼编码、译码器

C语言哈夫曼编码、译码器_第1页
1/14
C语言哈夫曼编码、译码器_第2页
2/14
C语言哈夫曼编码、译码器_第3页
3/14
#include #include #include #include #include //typedef int TElemType; const int UINT_MAX = 1000; typedef struct { int weight; int parent, lchild, rchild; } HTNode, *HuffmanTree; typedef char **HuffmanCode; //-----------全局变量----------------------- HuffmanTree HT; HuffmanCode HC; int *w, i, j, n; char *z; int flag = 0; int numb = 0; // -----------------求赫夫曼编码----------------------- int min(HuffmanTree t, int i) { // 函数void select()调用 int j, flag; int k = UINT_MAX; // 取k 为不小于可能的值 for (j = 1; j <= i; j++) if (t[j].weight < k && t[j].parent == 0) k = t[j].weight, flag = j; t[flag].parent = 1; return flag; } //--------------------slect 函数---------------------- void select(HuffmanTree t, int i, int &s1, int &s2) { // s1 为最小的两个值中序号小的那个 int j; s1 = min(t, i); s2 = min(t, i); if (s1 > s2) { j = s1; s1 = s2; s2 = j; } } // --------------算法6.12-------------------------- void HuffmanCoding(HuffmanTree &HT, HuffmanCode &HC, int *w, int n) { // w 存放n 个字符的权值(均>0),构造赫夫曼树HT,并求出n 个字符的赫夫曼编码HC int m, i, s1, s2, start; //unsigned c,f; int c, f; HuffmanTree p; char *cd; if (n <= 1) return ; //检测结点数是否可以构成树 m = 2 * n - 1; HT = (HuffmanTree)malloc((m + 1) *sizeof(HTNode)); // 0 号单元未用 for (p = HT + 1, i = 1; i <= n; ++i, ++p, ++w) { p->weight = *w; p->parent = 0; p->lchild = 0; p->rchild = 0; } for (; i <= m; ++i, ++p) p->parent = 0; for (i = n + 1; i <= m; ++i) // 建赫夫曼树 { // 在HT[1~i-1]中选择parent 为0 且weight 最小的两个结点,其序号分别为s1 和s2 select(HT, i - 1, s1, s2); HT[s1].parent = HT[s2].parent = i; HT[i].lchild = s1; HT[i].rchild = s2; HT[i].weight = HT[s1].weight +...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

C语言哈夫曼编码、译码器

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部