数据结构课程设计---哈夫曼编码器

数据结构课程设计---哈夫曼编码器

ID:8792488

大小:281.00 KB

页数:18页

时间:2018-04-07

数据结构课程设计---哈夫曼编码器_第1页
数据结构课程设计---哈夫曼编码器_第2页
数据结构课程设计---哈夫曼编码器_第3页
数据结构课程设计---哈夫曼编码器_第4页
数据结构课程设计---哈夫曼编码器_第5页
资源描述:

《数据结构课程设计---哈夫曼编码器》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、16数据结构课程设计:哈夫曼编码器摘要哈夫曼(huffman)树是一种带权路径长度最小的二叉树,也称最优二叉树,它有着极为广泛的应用。而我今天做的课程设计就是其中的一个应用---哈夫曼编码器。其实它的思想很简单,显示根据输入的权值建立一棵哈夫曼树,然后根据哈夫曼数求出各个叶结点的编码。这样就构成了一个最简单的哈夫曼编码器。关键词:哈夫曼树编码器最优二叉树带权路径长度16数据结构课程设计:哈夫曼编码器目录1课题分析11.1设计目的11.2设计要求11.3设计内容12总体设计与分析32.1功能函数设计32.1.1建立哈夫曼树32.2.2求哈夫曼编码函数32.2.3打印

2、编码函数33程序说明43.1结构图44程序调试54.1菜单54.2输入叶结点和权值64.3输出哈夫曼编码75设计问题85.1存入文件85.1.1问题185.1.2问题286小结9参考文献10源代码1116数据结构课程设计:哈夫曼编码器1课题分析在当今信息爆炸时代,如何采用有效的数据压缩技术节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视,哈夫曼编码正是一种应用广泛且非常有效的数据压缩技术。哈夫曼编码是一种编码方式,以哈夫曼树—即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。哈夫曼编码使用一张特殊的编码表将源字符(例如某文件中的一个符号

3、)进行编码。这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。赫夫曼编码的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个叶子对应的字符的编码,这就是哈夫曼编码。1.1设计目的(1)复习并灵活掌握二叉树的各种储存结构和遍历方法。(2

4、)了解静态链表,并掌握其构造方法。(3)掌握哈夫曼树的构造过程和哈夫曼编码的求解方法。(4)复习掌握文件读写的基本方法。1.2设计要求(1)求得的哈夫曼编码及WPL必须写入编码文件。(2)哈夫曼树的存储可以采用静态链表或二叉链表。1.3设计内容我在实验中采用的是静态链表作为存储结构,其数据类型可以定义为:#definem2*n-1/*m为哈夫曼树的结点*//*具有n个叶结点的哈夫曼树共有2n-1个结点*/typedefstruct{intwi;/*定义权值*/chardata;/*定义叶结点*/intParent,Lchild,Rchild;/*定义父结点、左孩子

5、、右孩子*/16数据结构课程设计:哈夫曼编码器}huffm;huffmHT[m+1];/*静态链表HT[m+1]*/(1)从文件中读取所有结点的权值,将读取的权值放到静态链表中,并初始化静态链表。(2)依据给定的权值,不断生成各分支结点,直到生成树根结点为止,得到生成哈夫曼树后的静态链表。(3)规定所有的左分支为0,右分支为1,从树根到叶子所经过的分支构成的01编码,即是对应叶子的哈夫曼编码。(4)求出所有叶子的哈夫曼编码,并将编码写入文件。16数据结构课程设计:哈夫曼编码器2总体设计与分析通常我们把数据压缩的过程称为编码,解压缩的过程称为解码。电报通信是传递文字

6、的二进制码形式的字符串。构造一棵赫夫曼树,此构造过程称为赫夫曼编码。设计实现的功能:(1)赫夫曼树的建立;(2)赫夫曼编码的生成;(3)编码文件的译码。2.1功能函数设计2.1.1建立哈夫曼树voidHuffmTree(huffmHT[m+1]);我用的是手动输入,首先提醒用户输入8个叶结点,即8个字母,输入完毕后提醒用户输入8个权值。以上的两个输入的输入格式都用空格隔开,以回车结束。哈夫蛮树建立成功。其基本算法是:①由给定的8个权值,构造由空二叉树扩充得到的扩充二叉树,每个数只有一个外部结点。②在已经构造的扩充二叉树中,选取根结点权值最小和次小的两个。将它们作为

7、左子树、右子树,构造成一颗新的扩充二叉树,它的根结点的权值为两子树的权值之和。③重复执行步骤②,每次都使扩充的二叉树的个数减一,当只剩下一棵扩充二叉树时,它便是所要构造的哈夫曼树。2.2.2求哈夫曼编码函数voidHuffmcode(ctypecode[n+1]);从根结点开始,寻找每一个叶结点,在寻找过程中,经过左子树时,编码增加“0”,经过右子树时,编码增加“1”,当每一个叶结点都访问过时,便得到相应的编码。2.2.3打印编码函数voidOutput(ctypecode[n+1]);打印编码函数即输出编码函数。当用户输好叶结点和权值后,通过哈夫曼编码函数进行编

8、码,然后通

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。