实验5.1赫夫曼编译

上传人:今*** 文档编号:105742611 上传时间:2019-10-13 格式:DOCX 页数:20 大小:272.81KB
返回 下载 相关 举报
实验5.1赫夫曼编译_第1页
第1页 / 共20页
实验5.1赫夫曼编译_第2页
第2页 / 共20页
实验5.1赫夫曼编译_第3页
第3页 / 共20页
实验5.1赫夫曼编译_第4页
第4页 / 共20页
实验5.1赫夫曼编译_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《实验5.1赫夫曼编译》由会员分享,可在线阅读,更多相关《实验5.1赫夫曼编译(20页珍藏版)》请在金锄头文库上搜索。

1、界面输入字符串并进行编码进行译码对附件统计字符频率并编码字符出现频率最少,编码为: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 /定义哈夫曼树各结点i

2、nt 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)

3、;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 /最多

4、子叶数/读取文件部分功能实现的代码$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 =

5、 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

6、= 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

7、.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.lchil

8、d = 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.tx

9、t);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

10、 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,

11、 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

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号