资源预览内容
第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
第9页 / 共20页
第10页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
界面输入字符串并进行编码进行译码对附件统计字符频率并编码字符出现频率最少,编码为:0011001011011,0011001011010,0011001100101,0011001100101和001100101100.字符空格,e,t,a,i,s是出现频率最高,编码为:(好像出错了L)编译后的文件大小为:909kb,比原文件小了一半多。源代码:#include stdafx.h#ifndef HUFFMAMCODE_H #define HUFFMAMCODE_H#include#includeusing namespace std;struct HuffmanNode /定义哈夫曼树各结点int weight;int parent;int lchild, rchild;int flag;class HuffmanCode1 /哈夫曼编码类public:char Info100;int Start;char Leaf;class HuffmanTree1 /建立哈夫曼树类private:HuffmanNode *Node;public:int f;HuffmanCode1 *hf;HuffmanTree1();HuffmanTree1();void TranslatedCode();void CodeHuf(HuffmanNode a, HuffmanCode1 b, int n);void CreateHfmTree(char Str, int m, int n);void TransCode(HuffmanCode1 b, int n);void TranslateArtcle(HuffmanCode1 b, int n);#endif /HUFFMAMCODE_HHuffmanCode.cpp#include iostream#include#include math.h#include stdlib.h#includeusing namespace std;#define MAXDATA 100000 /最长字符串#define MAXSIZE 1500 /最多子叶数/读取文件部分功能实现的代码$HuffmanTree1:HuffmanTree1()Node = NULL; /将树结点初始化为HuffmanTree1:HuffmanTree1()delete Node; /释放结点空间 void HuffmanTree1:CreateHfmTree(char Str, int m, int n)/建立哈夫曼树int i, j, m1, m2, x1, x2;HuffmanNode *HfmNode = new HuffmanNode2 * n - 1;HuffmanCode1 *HfmCode = new HuffmanCode1n;for (i = 0; i2 * n - 1; i+)HfmNodei.weight = 0;HfmNodei.parent = 0;HfmNodei.flag = 0;HfmNodei.lchild = -1;HfmNodei.rchild = -1;for (i = 0; in; i+)HfmNodei.weight = mi;HfmCodei.Leaf = Stri;for (i = 0; in - 1; i+)m1 = m2 = 32767;x1 = x2 = 0;for (j = 0; jn + i; j+)if (HfmNodej.weight = m1&HfmNodej.flag = 0)m2 = m1;x2 = x1;m1 = HfmNodej.weight;x1 = j;else if (HfmNodej.weight = m2&HfmNodej.flag = 0)m2 = HfmNodej.weight;x2 = j;HfmNodex1.parent = n + i;HfmNodex2.parent = n + i;HfmNodex1.flag = 1;HfmNodex2.flag = 1;HfmNoden + i.weight = HfmNodex1.weight + HfmNodex2.weight;HfmNoden + i.lchild = x1;HfmNoden + i.rchild = x2;CodeHuf(HfmNode, HfmCode, n);TransCode(HfmCode, n);/TranslateArtcle(HfmCode,n); hf = HfmCode; f = n;void HuffmanTree1:CodeHuf(HuffmanNode a, HuffmanCode1 b, int n) /对哈夫曼树进行编码HuffmanCode1 Hfd;int c, p;for (int i = 0; in; i+)Hfd.Start = n - 1;c = i;p = ac.parent;while (p != 0)if (ap.lchild = c)Hfd.InfoHfd.Start = 0;elseHfd.InfoHfd.Start = 1;Hfd.Start-;c = p;p = ac.parent;printf(%c :, bi.Leaf);for (int j = Hfd.Start + 1; jn; j+)bi.Infoj = Hfd.Infoj;printf(%c, Hfd.Infoj);printf(n);bi.Start = Hfd.Start;void HuffmanTree1:TransCode(HuffmanCode1 b, int n) /对文章进行翻译并保存ifstream ifs(RFCdoc.txt);ofstream ofs(WCode.txt);char s3200000;int t = 0;char ch;cout * endl;while (ifs.get(ch)if (ch != n)st = ch;for (int i = 0; in; i+)if (st = bi.Leaf)for (int j = bi.Start + 1; jn; j+)ofs bi.Infoj;t+;/printf(n);/printf(报文的编码已经保存在WCode.txt中n);/cout * endl;void HuffmanTree1:TranslateArtcle(HuffmanCode1 b, int n) /将所译的码翻译成文章并保存int t = 0;ifstream ifs(WCode.txt);ofstream ofs(TransWData.txt);string s;getline(ifs, s);for (t = 0; st != 0; t+);int l = 0;int j = 0;printf(报文的译码结果为:n);while (lt)while (jn)int hu = bj.Start + 1;int k = 0;while (hun)if (sl = bj.Infohu)l+;hu+;k+;elsebreak;if (hu = n)printf(%c, bj.Leaf);ofs bj.Leaf;j = 0; break;elsel = l - k; j+;continue;printf(n);printf(译码的结果已经保存到TransWData.txt中n);cout * endl;void HuffmanTree1:TranslatedCode()ifstream ifs(RFCdoc.txt);char str3200000;char Str3200000;int i = 0, j, m100, h, k = 0;int n = 0;cout * endl;/printf(文件中提取的文章字符串是:n);char ch;while (ifs.get(ch)/printf(%c, ch);if (ch != n)strn+ = c
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号