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

上传人:汽*** 文档编号:499150304 上传时间:2022-11-07 格式:DOC 页数:15 大小:228.50KB
返回 下载 相关 举报
数据结构哈夫曼树编码译码实验报告_第1页
第1页 / 共15页
数据结构哈夫曼树编码译码实验报告_第2页
第2页 / 共15页
数据结构哈夫曼树编码译码实验报告_第3页
第3页 / 共15页
数据结构哈夫曼树编码译码实验报告_第4页
第4页 / 共15页
数据结构哈夫曼树编码译码实验报告_第5页
第5页 / 共15页
点击查看更多>>
资源描述

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

1、【详细设计】具体代码实现如下:/Haffma nTree.h#in clude#in clude#in cludestruct Huffma nN ode /哈夫曼树的一个结点int weight;int pare nt;int lchild,rchild;class Huffma nTree / 哈夫曼树private:Huffma nN ode *Node; /Node存放哈夫曼树char *Info; /In fo存放源文用到的字符源码,如 a,b,c,d,e,此内容可以放入结点中,不单独设数组存放int LeafNum; /哈夫曼树的叶子个数,也是源码个数public:Huffma n

2、Tree();void CreateHuffma nTree(); /*种建立哈夫曼树的方法中选择:重,建立哈夫曼树,入哈夫曼树信息,建立哈夫曼树Huffma nTree();在内存中建立哈夫曼树,存放在Node中。 让用户从两1.从键盘读入源码字符集个数,每个字符,和每个字符的权并将哈夫曼树写入文件 hfmTree中。2.从文件hfmTree中读*/ void CreateHuffma nTreeFromKeyboard();void CreateHuffma nTreeFromFile();void Encoder(); /*使用建立好的哈夫曼树(如果不在内存,则从文件hfmTree中读入

3、并建立内存里的哈夫曼树),对文件ToBeTran中的正文进行编码,并将码文写入文件 CodeFile中。 ToBeTra n的内容可以用记事本等程序编辑产生。*/void Decoder(); /*待译码的码文存放在文件CodeFile中,使用建立好的哈夫曼树(如果不在内存,void Prin tCodeFile(); /* void Prin tHuffma nTree(); /* 他树形表示法)显示在屏幕上,则从文件hfmTree中读入并建立内存里的哈夫曼树)将码文译码, 得到的源文写入文件 TextFile 中,并同时输出到屏幕上。*/将码文文件CodeFile显示在屏幕上*/将哈夫曼树

4、以直观的形式(凹入表示法,或广义表,或其同时写入文件 TreePri ntFile中*/void PrintHuffmanTree_aoru(int T,int layer=1);/* 凹入表示法 显示哈夫曼树,由PrintHuffmanTree()调用 */;/Huffma nTree.cpp#in clude#i nclude /为使用整型最大值#in cludeHuffma nTree.husing n amespace std;/*Huffma nTree:Huffma nTree()Node=NULL;/*Huffma nTree:Huffma nTree()deleteNode;/

5、*void Huffma nTree:CreateHuffma nTree()char Choose;cout Choose;if(Choose=2) /键盘输入建立哈夫曼树CreateHuffma nTreeFromKeyboard();/choose=2else /从哈夫曼树文件 hfmTree.dat中读入信息并建立哈夫曼树CreateHuffma nTreeFromFile();/*void Huffma nTree:CreateHuffma nTreeFromKeyboard()int Num;coutn请输入源码字符集个数:;cinNum;if (Num=1)cout无法建立少于2

6、个叶子结点的哈夫曼树。nn;return;LeafNum=Num;Node=new Huffma nN ode2*Num-1;Info=new char2*Num-1;for(i nt i=0;iNum;i+) /读入哈夫曼树的叶子结点信息cout请输入第i+1个字符值;getchar();In foi=getchar(); /源文的字符存入字符数组In fogetchar();coutNodei.weight; /源文的字符权重存入Node.weightNodei.pare nt=-1;Nodei.lchild=-1;Nodei.rchild=-1;for(i=Num;i2*Num-1;i+

7、)/循环建立哈夫曼树内部结点int pos1=-1,pos2=-1;int max 仁32767,max2=32767;for(i nt j=O;ji;j+)在根节点中选出权值最小的两个if(Nodej.pare nt=-1) 是否为根结点 if(Nodej.weightmax1)max2=max1;max1=Nodej.weight;pos2=pos1;pos1=j;elseif(Nodej.weightmax2)max2=Nodej.weight;pos2=j;Nodepos1.pare nt=i;Nodepos2.pare nt=i;Nodei.lchild=pos1;Nodei.rch

8、ild=pos2;Nodei.pare nt=-1; Nodei.weight=Nodepos1.weight+Nodepos2.weight; /forcout哈夫曼树已成功构造完成。n;II把建立好的哈夫曼树写入文件hfmTree.datchar ch;cout ch;if (ch!=y&ch!=Y) return;else ofstream fop;fop.ope n(hfmTree.dat,ios:out|ios:b in ary|ios:tr unc); /打开文件if(fop.fail()coutn哈夫曼树文件打开失败,无法将哈夫曼树写入 hfmTree.dat文件。n;retur

9、n;fop.write(char*)&Num,sizeof(Num); / for(i=0;iNum;i+) /再写入源文字符集的所有字符(存储在 fop.write(char*)&In foi,sizeof(l nfoi); flush(cout);for(i=0;i2*Num-1;i+) /最后写入哈夫曼树的各个结点(存储在先写入哈夫曼树的叶子结点个数Info 中)Node 中)/*fop.write(char*)&Nodei,sizeof(Nodei);flush(cout);fop.close(); / 关闭文件coutn 哈夫曼树已成功写入hfmTree.dat 文件。n;*void

10、 Huffma nTree:CreateHuffma nTreeFromFile() ifstream fip;fip.ope n(hfmTree.dat,ios:b in ary|ios:i n); if(fip.fail()cout哈夫曼树文件hfmTree.dat 打开失败,无法建立哈夫曼树。n;return;fip.read(char*)&LeafNum,sizeof(LeafNum);if (LeafNum=1)cout哈夫曼树文件中的数据有误,叶子结点个数少于2个,无法建立哈夫曼树。n;fip.close();return;lnfo=new charLeafNum;Node=new

11、 Huffma nN ode2*LeafNum-1;for(i nt i=O;iLeafNum;i+)fip.read(char*)&In foi,sizeof(l nfoi);for(i=0;i2*LeafNum-1;i+)fip.read(char*)&Nodei,sizeof(Nodei);fip.close();cout哈夫曼树已成功构造完成。n;*void Huffma nTree:E ncoder()if(Node=NULL)内存没有哈夫曼树,则从哈夫曼树文件hfmTree.dat中读入信息并建立哈夫曼树CreateHuffma nTreeFromFile();if (LeafNu

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

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

当前位置:首页 > 办公文档 > 活动策划

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