- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
北京理工大学数据结构课程设计哈弗曼树文件压缩资料.ppt
四、利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,将结果存入TextFile中 void HaffmanCode::decoding() { fstream infile,outfile; infile.open(CodeFile.txt,ios::in); outfile.open(TextFile.txt,ios::out); if (!infile) { coutCodeFile.txt cant open!endl; abort(); 第 * 页 } if (!outfile) coutTextFile.txt cant open!endl; abort(); } int i,j; char ch[255]; memset(ch,5,255); while (!infile.eof()) { 第 * 页 infile.getline(ch,255); i=0; while (ch[i] != \0) { j=2*num-2; while (ht[j].lchild != -1) { if(ch[i] == 1) j=ht[j].rchild; else j=ht[j].lchild; 第 * 页 i++; } couthc[j].ch; outfilehc[j].ch; } } coutendl; infile.close(); outfile.close(); } 第 * 页 第 * 页 * 北京理工大学 / 北京理工大学 / 北京理工大学 / 北京理工大学 / 北京理工大学 / 北京理工大学 / 北京理工大学 / 北京理工大学 / 北京理工大学 / 北京理工大学 / 北京理工大学 / 北京理工大学 / 在信息通信过程中,我们需要传输大量文件。在大的文件中有许多冗余,为了提高信道利用率、缩短信息传输时间、降低传输成本,我们设计一个编译系统,发送方利用哈夫曼编码对文件进行压缩后传输,接收方将接收到的数据进行译码。 第 * 页 (1)保存:传输文件存于文本文件中,如:源文件textfile (2)预处理:从文件中读取数据,处理并建立字符集频率表 (3)初始化:利用字符集频率表建立哈夫曼树 (4)编码:利用建立好的哈夫曼树对源文件进行编码,实现文件压缩,然后将结果以文件形式保存,如编码文件codefile (5)译码:利用建立好的哈夫曼树对codefile中的代码进行译码。结果存入译码文件decofile中。 (6)输出:可以显示testfile、codefile、decofile和哈夫曼树 第 * 页 (一)利用字符和权值建立哈夫曼树求得哈夫曼编码 (二)利用二叉树先序遍历输出哈夫曼树 第 * 页 一、 哈夫曼树类定义 class HaffmanCode { private: int num; //字符集个数 Node *ht; //哈夫曼树 HaffCode *hc; //哈夫曼码 public: HaffmanCode():num(0),ht(NULL),hc(NULL){}; ~HaffmanCode(); 第 * 页 void buildHfmtree(char str[],int w[],int n); //构 造哈夫曼树 void Hfmcode(char str[]); //由哈夫曼树生成哈 夫曼编码 void encoding(); void decoding(); void printcode(); void printtree(); //打印树的实例函数 void printtree(fs
文档评论(0)