数据结构_实验报告四__赫夫曼编码的应用.doc
文本预览下载声明
实验课程名称 数据结构课程设计
专 业 班 级
学 生 姓 名
学 号
指 导 教 师
2012 至 2013 学年第 一 学期第 1 至 18 周
目录
一、 概 述 2
1.1课程设计的背景 2
1.2 赫夫曼树 2
1.3 课程设计目的 2
二、系统分析 3
2.1 课程设计的主要内容 3
2.2功能设计 3
三、概要设计 4
3.1 设计思想 4
3.2 函数间的关系 4
四、详细设计 5
五、运行于测试 8
六、总结与心得 11
附录:程序代码 12
试验题目:赫夫曼编码的应用
一、 概 述
1.1课程设计的背景
当下,如何采用有效的数据压缩技术节省数据文件的存储空间和计算机网络传送时间已越来越引起人们的重视,赫夫曼编码正是一种运用广泛且非常有效的数据压缩技术。
1.2 赫夫曼树
赫夫曼编码就是利用赫夫曼树求得用于通信的二进制编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示为“0码”,指向右子树的分支表示为“1”码,取每条路径上的“0”和“1”的序列作为和各个叶子对应的字符的编码,这就是所谓的赫夫曼编码。
1.3 课程设计目的
本试验就是通过先建立赫夫曼树,然后利用建好的赫夫曼树生成赫夫曼编码后进行译码。
二、系统分析
2.1 课程设计的主要内容
本实验要求完成发送端对等待传送数据的编码和接收端对传送来的数据的译码。要实现五个功能:接受原始数据、编码、译码、输出编码、译码存档。通过系统的提示要建立赫夫曼树并对载入的原文件进行编码,并保存到txtfile.tet文件中,同时输出到屏幕。最后将建立的赫夫曼树用某种的存储方式存储后输出。
2.2功能设计
(1)初始化(initialization) 从终端读入字符集大小n,以及n个字符和n个权值,建立赫夫曼树。并将它存放于文件htmtree.tx中。
(2)编 码(encoding) 利用已经建立好的赫夫曼树(如不在内存,则从文件hfmtree.txe中读入,对文件tobetree.txt中的正文进行编码。然后将结果存在文件codefile.txt中。
(3)译 码(decoding) 利用已经建立好的赫夫曼树将文件codefile.txt中的代码进行译码,将结果存入文件textfile.txt中。
(4)输出译码(print) 将文件codefile.txt以紧凑格式显示在终端上。同时将字符型式写入到文件codeprint.txt中。
(5)显示赫夫曼树(treeprint) 将已经在内存中的赫夫曼树以直观的方式显示在屏幕上,同时将此字符型的赫夫曼树写入文件treeprint.txt中。
三、概要设计
3.1 设计思想
赫夫曼树用邻接矩阵来作为存储结构,借助静态链表来实现遍历。
3.2 函数间的关系
四、详细设计
1.赫夫曼树的抽象数据类型定义
ADT HuffmanCoding{
数据对象 T:具有相同特征的数据元素的集合
数据关系 R:满足最优二叉树的关系
基本操作 P:
Init (t)
操作结果:构造一个空赫夫曼树t。
Encode()
操作结果:利用赫夫曼树进行编码
Decode()
操作结果:利用赫夫曼进行译码
}
2.主函数
void mian()
{打印表头:
while(选择选项不为0)
{输入选项:
switch(选择项)
{
case 1:初始化;break;
case 2:输入编码字符;break;
case 3:编码字符;break;
case 4:译码操作;break;
case 5:输出译码;break;
case 6:显示赫夫曼树;break;
default :输入错误,重新选择;
}
3.求赫夫曼编码
if(t[j].weightkt[j].parent==0)
k=t[j].weight,flag=j; //flag为标志符,为不小于可能的值
t[flag].parent=1;
4.新建赫夫曼树
HT[s1].parent=HT[s2].parent=i;//将选好的两个结点设置成有同一个双亲结点 HT[i].lchild=s1;//左孩子的权值
HT[i].rc
显示全部