数据结构实习报告哈夫曼编码Word文档下载推荐.docx
- 文档编号:15894302
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:26
- 大小:1.93MB
数据结构实习报告哈夫曼编码Word文档下载推荐.docx
《数据结构实习报告哈夫曼编码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构实习报告哈夫曼编码Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。
目录
1.题目.................................................2
2.要求.........................................................................2
3.程序实现...............................................................2
3.1程序运行及编译环境................................................2
3.2程序描述...................................................2
3.3实现功能.......................................................3
3.3.1子功能模块1......................................................4
3.3.1.1输入项.....................................................5
3.3.1.2输出项.....................................................5
3.3.1.3数据结构的定义.............................................5
3.3.1.3.1全局数据结构............................................5
3.3.1.3.2局部数据结构.............................................7
3.3.1.4算法及程序说明................................................7
3.3.1.5接口设计......................................................8
3.3.2子功能模块2.....................................................9
3.3.3子功能模块3.....................................................10
3.3.4子功能模块4.....................................................12
3.4运行结果...........................................................13
3.4.1基本功能.........................................................13
3.4.2附加功能.........................................................17
3.5尚未解决的问题..........................................................22
4本次作业心得................................................................24
1.题目
设二叉树以二叉链表的形式保存,T为指向根结点的指针。
试完成以下功能:
1、建立二叉树:
从键盘输入各结点的值,可参照二叉树的顺序存储方式。
例如输入“a,b,c,,d”表示结点a是根,b和c是a的两个孩子,b仅有右孩子d。
2、统计T中叶结点的个数。
3、统计T中度为2的结点的个数。
4、求树T的高度。
5、判断T中是否有度为1的结点(即按照国外教材的定义,是否为满树)。
在此基础上,实现Huffman编码及译码,达到以下两个目标:
1、掌握二叉树的二叉链表存贮结构。
2、掌握Huffman算法。
2.要求
使用文件保存初始的文本数据及最终的结果。
●文件名为inputfile1.txt的文件保存的是一段英文短文;
●文件名为inputfile2.txt的文件保存01形式的编码段;
●文件名为outputfile1.txt的文件保存各字符的出现次数和对应的编码;
●文件名为outputfile2.txt的文件保存对应于inputfile2.txt的译码结果。
统计inputfile1.txt中各字符的出现频率,并据此构造Huffman树,编制Huffman编码;
根据已经得到的编码,对01形式的编码段进行译码。
具体的要求:
1.将给定字符文件编码:
生成编码,输出每个字符出现的次数和编码;
2.将给定编码文件译码:
生成字符,输出编码及其对应字符。
3.程序实现
3.1程序运行及编译环境
程序是用VisualStudio2010即VS10.0编译的。
可以在windows系列的操作系统上运行。
3.2程序描述
该程序主要用于实现二叉树的二叉链表保存并实现Huffman编码以及译码。
其流程如下:
A).程序读取输入文件,并生成相应的数据结构
a.用数组来声明并存储树,完成初始化的工作
b.读入文本内容,并统计每个字符的频率
c.根据每个字母的权重,对森林里每棵树的相应参数重新赋值
d.将森林合并为树
B).输出相关信息
a.在文本里依次输出字符出现的次数,频率以及编码
B.在控制台输出统计的字母频率(其实这个不是必要的)
C).编码以及译码
a.在统计好的字符出现次数的基础上编码
b.编码前的两个文件比较
c.对编码的文件译码
d.译码后的两个文件比较
D).完成
3.3实现功能
输入文件:
inputfile1.txt
内含十几篇英文文章
控制台逐个字符处理,得到每个字符的信息先放到一个结构体里面,以字符的ASCII码作为结构数组的下标
每个不同的字符依次生成为一棵树,这时每棵树都只有根节点
文本里面输出字符出现次数,对应频率还有编码的信息,控制台输出字符,频率,如果是字母的话还输出它在字母这个群体里面的频率(仅为统计之用,与题目无直接关系)
对原文件inputfile1.txt编码,字符编码存outputfile1.txt,全文的编码放于inputfile2.txt
然后译码,结果存放于outputfile2.txt中
利用文件对比命令,比较文本inputfile1.txt和outputfile2.txt,没有发现差异,说明编码与解码的过程是正确的。
主函数结束
3.3.1子功能模块1
读入文本,统计频率。
//开始读入文件
while(fin1.get(c)){//读入文件
let[c].weight++;
//统计每个字符的权重
CharCount++;
if(c<
0||c>
127){
cout<
<
"
打开文件在一以下位置出现错误:
;
fin1.get(c);
fin1.get(c);
for(inti=0;
i<
TIPS;
i++){fin1.get(c);
cout<
c;
}
的前面"
temp_char<
的后面"
endl;
可能原因有:
①文本编码为UTF-8,Unicode,Unicodebigendian等非ANSI编码;
"
②或者文本含有中文字符或者全角字符"
endl<
请核查!
return1;
}
if((c>
='
a'
&
c<
z'
)||(c>
A'
Z'
))
LetterCount++;
for(inti=0;
i++)
temp_char[i]=temp_char[i+1];
temp_char[TIPS]=c;
fin1.close();
//读入完成
3.3.1.1输入项
输入项有:
fin1:
文件输入流
3.3.1.2输出项
let[c].weight;
//每个字符的出现次数
CharCount;
//所有字符出现次数总和
//文件流读入的每个字符
temp_char;
//保存当前读到字符的前几个字符,以便于在含有Unicode,UTF-8等编码的字符时,及时找出出错字符位置
3.3.1.3数据结构的定义
3.3.1.3.1全局数据结构
全局数据结构有:
//用一个结构来存储字符,统计的权重,以及该字母在哈夫曼树里面的偏移,这样可以快速定位到该字母的结点
typedefstructLet{
charletter;
//字符
intoffset;
//字母在哈夫曼树里面的偏移
intweight;
//字符的权重
doublefreq;
//freq表示在所有字符中的频率
doubleletterFreq;
//表示字母在所有字母中的频率
};
typedefstructHuffNode{
//letter表示结点的字符
//weight表示权重
HuffNode*left;
//左孩子
HuffNode*right;
//右孩子
boolmerge;
//merge表示能否合并,如果两棵树合并后,就不可以合并了
boolcode[MAXCODELENGTH];
//0表示左边,1表示右边
intValidCode;
//ValidCode表示前多少位的编码是有效的
classHuffTree{
HuffNode*root;
//树的根节点
public:
HuffTree(charletter,intweight);
HuffTree();
HuffNode*getRoot();
voidsetRoot(HuffNode*Root);
HuffTree*HuffTreeMerge(HuffTree*Tree1,HuffTree*Tre
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实习 报告 哈夫曼 编码