数据结构哈夫曼树编码译码实验报告

上传人:M****1 文档编号:487315994 上传时间:2023-12-21 格式:DOCX 页数:24 大小:16.76KB
返回 下载 相关 举报
数据结构哈夫曼树编码译码实验报告_第1页
第1页 / 共24页
数据结构哈夫曼树编码译码实验报告_第2页
第2页 / 共24页
数据结构哈夫曼树编码译码实验报告_第3页
第3页 / 共24页
数据结构哈夫曼树编码译码实验报告_第4页
第4页 / 共24页
数据结构哈夫曼树编码译码实验报告_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《数据结构哈夫曼树编码译码实验报告》由会员分享,可在线阅读,更多相关《数据结构哈夫曼树编码译码实验报告(24页珍藏版)》请在金锄头文库上搜索。

1、资料范本本资料为word版本,可以直接编辑和打印,感谢您的下载数据结构哈夫曼树编码译码实 验报告地点:时间:说明:本资料适用于约定双方经过谈判,协商而共同承认,共同遵守的责任与 义务,仅供参考,文档可直接下载或修改,不需要的部分可直接删除,使用时 请详细阅读内容【详细设计】具体代码实现如下:/HaffmanTree.h#include#include#includestruct HuffmanNode /哈夫曼树的一个结点(int weight;int parent;int lchild,rchild;class HuffmanTree /哈夫曼树(private:HuffmanNode *N

2、ode; /Node存放哈夫曼树char *Info;/Info存放源文用到的字符源码,如a,b,c,d,e,此内容可以放入结点中,不单独设数组存放int LeafNum;/哈夫曼树的叶子个数,也是源码个数public:HuffmanTree();HuffmanTree();void CreateHuffmanTree(); /*在内存中建立哈夫曼树,存放在Node 中。让用户从两种建立哈夫曼树的方法中选择:1.从键盘读入源码字符集个数,每个字符,和每个字符的权重,建立哈夫 曼树,并将哈夫曼树写入文件hfmTree中。2.从文件hfmTree中读入哈夫曼树信 息,建立哈夫曼树*/void Cr

3、eateHuffmanTreeFromKeyboard();void CreateHuffmanTreeFromFile();void Encoder();/*使用建立好的哈夫曼树(如果不在内存,则从文件hfmTree中读入并建立内存里的哈夫曼树),对文件ToBeTran中的正文进行编码,并将码文写入文件CodeFile中。ToBeTran的内容可以用记事本等程序编辑产生。*/void Decoder();/*待译码的码文存放在文件CodeFile中,使用建立好的哈夫曼树(如果不在内存,则从文件hfmTree中读入并建立内存里的哈夫曼树)将码文译码,得到的源文写入文件TextFile中,并同时

4、输出到屏幕上。*/void PrintCodeFile();/*将码文文件CodeFile显示在屏幕上*/void PrintHuffmanTree(); /*将哈夫曼树以直观的形式(凹入表示法, 或广义表,或其他树形表示法)显示在屏幕上,同时写入文件TreePrintFile中*/void PrintHuffmanTree_aoru(int T,int layer=1); /*凹入表示法显示哈 夫曼树,由 PrintHuffmanTree()调用*/;/ /HuffmanTree.cpp#include#include /为使用整型最大值#include HuffmanTree.husing

5、 namespace std;/*HuffmanTree:HuffmanTree()(Node=NULL;/*HuffmanTree:HuffmanTree()(deleteNode;/*void HuffmanTree:CreateHuffmanTree()(char Choose;coutChoose;if(Choose=2) (/键盘输入建立哈夫曼树CreateHuffmanTreeFromKeyboard();/choose=2else ( 从哈夫曼树文件hfmTree.dat中读入信息并建立哈夫曼树CreateHuffmanTreeFromFile();/*void HuffmanT

6、ree:CreateHuffmanTreeFromKeyboard()(int Num;coutNum;if (Num=1)(cout无法建立少于2个叶子结点的哈夫曼树。nn;return;LeafNum=Num;Node=new HuffmanNode2*Num-1;Info=new char2*Num-1;for(int i=0;iNum;i+) (/读入哈夫曼树的叶子结点信息cout请输入第i+1 个字符值;getchar();Infoi=getchar(); /源文的字符存入字符数组Infogetchar();coutNodei.weight; /源文的字符权重存入 Node.weig

7、htNodei.parent=-1;Nodei.lchild=-1;Nodei.rchild=-1;for(i二Num;i2*Num-1;i+)(/循环建立哈夫曼树内部结点int pos1=-1,pos2=-1;int max1=32767,max2=32767;for(int j=0;ji;j+)/在根节点中选出权值最小的两个if(Nodej.parent=-1)/是否为根结点if(Nodej.weightmax1)(max2=max1;max1=Nodej.weight;pos2=pos1;pos1=j;elseif(Nodej.weightmax2)(max2=Nodej.weight;

8、pos2=j;Nodepos1.parent=i;Nodepos2.parent=i;Nodei.lchild=pos1;Nodei.rchild=pos2;Nodei.parent=-1;Nodei.weight=Nodepos1.weight+Nodepos2.weight; /forcout哈夫曼树已成功构造完成。n”;/把建立好的哈夫曼树写入文件hfmTree.datchar ch;coutch;if (ch!=y&ch!=Y) return;else(ofstream fop;fop.open(hfmTree.dat,ios:out|ios:binary|ios:trunc); /打

9、开文 件if(fop.fail()(coutn哈夫曼树文件打开失败,无法将哈夫曼树写入hfmTree.dat文 件 n;return;fop.write(char*)&Num,sizeof(Num); 先写入哈夫曼树的叶子结点个 数for(i=0;iNum;i+)( 再写入源文字符集的所有字符(存储在Info口中)fop.write(char*)&Infoi,sizeof(Infoi);flush(cout);for(i=0;i2*Num-1;i+)( /最后写入哈夫曼树的各个结点(存储在Node 口中)fop.write(char*)&Nodei,sizeof(Nodei);flush(co

10、ut);fop.close(); /关闭文件coutn哈夫曼树已成功写入hfmTree.dat文件。n;/*void HuffmanTree:CreateHuffmanTreeFromFile()(ifstream fip;fip.open(hfmTree.dat,ios:binary|ios:in);if(fip.fail()(cout哈夫曼树文件hfmTree.dat打开失败,无法建立哈夫曼树。n;return;fip.read(char*)&LeafNum,sizeof(LeafNum);if (LeafNum=1)(cout哈夫曼树文件中的数据有误,叶子结点个数少于2个,无法建立哈 夫

11、曼树n;fip.close();return;Info=new charLeafNum;Node=new HuffmanNode2*LeafNum-1;for(int i=0;iLeafNum;i+)fip.read(char*)&Infoi,sizeof(Infoi);for(i=0;i2*LeafNum-1;i+)fip.read(char*)&Nodei,sizeof(Nodei);fip.close();cout哈夫曼树已成功构造完成。n”;/*void HuffmanTree:Encoder()(if(Node=NULL)(/内存没有哈夫曼树,则从哈夫曼树文件hfmTree.dat中

12、读入信息并建立 哈夫曼树CreateHuffmanTreeFromFile();if (LeafNum=1)(cout内存无哈夫曼树。操作撤销nn;return;/ifchar *SourceText; /字符串数组,用于存放源文/让用户选择源文是从键盘输入,还是从源文文件ToBeTran.txt中读入 char Choose;coutChoose;if(Choose=1)(ifstream fip1(ToBeTran.txt);if(fip1.fail()(cout源文文件打开失败!无法继续执行n;return;char ch;int k=0;while(fip1.get(ch) k+; /第一次读文件只统计文件中有多少个字符, 将字符数存入kfip1.close();SourceText=new chark+1; /申请存放源文的字符数组空间ifstream fip2(ToBeTran.txt);/第二次读源文文件,把内容

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

当前位置:首页 > 学术论文 > 其它学术论文

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