给一篇英文文章(text),统计各字符出现(仅需包括英文大小写字母)次数。
1) 输出每个字符出现的次数,并进行Huffman树构造,将每个字符的编码存入到文件code1.txt。
2) 输出字符串”Data Structure”的编码。
3) 将英文文章前4段的Huffman编码保存到文件code2.txt。
4) 实现解码功能, 对文章的前2段进行解码。
1 //哈夫曼树 2 void HufCode() 3 { 4 //52个叶结点+1个最大结点(便于找最小值) 5 HTNode HT[104]; 6 7 //初始化结点 8 initHT(HT); 9 10 //创建哈夫曼树 11 for (int i = 53; i < 2 * 52; i++) 12 { 13 int s1 = 0; 14 int s2 = 0; 15 //在1-i-1区间里面找两个parent=0等权值最小的s1,s2 16 select_two_small(HT, i - 1, s1, s2); 17 18 //建树 19 HT[s1].parent = HT[s2].parent = i; 20 HT[i].lchild = s1; 21 HT[i].rchild = s2; 22 HT[i].weight = HT[s1].weight + HT[s2].weight; 23 } 24 25 //从叶节点到根节点获取 26 char temp[53]={0}; 27 //分配临时空间存储编码 28 for (int i = 1; i <= 52; i++) 29 { 30 int start = 0; 31 //一个孩子c和一个父亲f,一直往上遍历 32 for (int c = i, f = HT[i].parent; f != 0; c = f, f = HT[f].parent) 33 { 34 if (HT[f].lchild == c) 35 temp[start++] = '1'; 36 else if (HT[f].rchild == c) 37 temp[start++] = '0'; 38 } 39 temp[start++] = '\0'; 40 reverseS(temp,start);//翻转才是要的编码 41 strcpys(i, temp,start); 42 } 43 }
这些就行了
标签:编码,哈夫曼,int,s2,解码,HT,c++,s1 From: https://www.cnblogs.com/saucerdish/p/17850294.html