《软件技术课程设计》

《软件技术课程设计》

ID:29132366

大小:172.00 KB

页数:15页

时间:2018-12-16

《软件技术课程设计》_第1页
《软件技术课程设计》_第2页
《软件技术课程设计》_第3页
《软件技术课程设计》_第4页
《软件技术课程设计》_第5页
资源描述:

《《软件技术课程设计》》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、《软件技术课程设计》课程论文报告书题目:哈夫曼编码及解码算法的实现系别:机电系学号:24102201598学生姓名:周旭阳15目录Ø1.前言Ø2.概要设计2.1数据结构设计2.2算法设计2.3ADT描述2.4功能模块分析Ø3.详细设计3.1数据存储结构设计3.2主要算法流程图(或算法代码)Ø4.软件测试Ø5.总结Ø附录151.前言读取数据,统计所得到的文件中每个字母的权值,创建哈夫曼树,哈夫曼编码。哈夫曼解码,解码后内容写入到指定的文件。读取数据里面的内容是由英文单词组成。读取文件的时候传入文件存放的路径、读取方式以及读出以后存

2、放的数组,最终可以得到一个存放目标文件内容的数组。将得到的数组进行字母权值的统计,统计每个字母出现的次数,次数即为每个字母的权值。将得到的字符数组与权值数组作为创建哈夫曼树的依据,哈夫曼树根据每个字母权值的大小来创建,每个节点,包括权值、父节点、左子、右子和字母本身。根据哈夫曼树进行编码。形成目标文件的哈夫曼编码,将此编码返回。根据哈夫曼树得到的数组即为解码数组,解码数组作为解码的结果返回。写入输出文件,将解码得到的数组、文件的完整路径以及文件的写方式作为参数传入,将数组写入到相应的文件中。2.概要设计2.1数据结构设计构造哈夫

3、曼树的方法 对于已知的一组叶子的权值W1,W2......,Wn ①首先把n个叶子结点看做n棵树(仅有一个结点的二叉树),把它们看做一个森林。 ②在森林中把权值最小和次小的两棵树合并成一棵树,该树根结点的权值是两棵子树权值之和。这时森林中还有n-1棵树。③重复第②步直到森林中只有一棵为止,此树就是哈夫曼树。2.2算法设计(1)建立哈夫曼树的算法:15定义各结点类型其中应包含两类数据一是权重域weight;一是应该包括指向左右孩子和指向双亲的指针这里分别用lchild、rchild和parent来表示,因此可用静态三叉链表来实现。

4、在实际构造中由于是叶子结点来构造新的根结点其构造过程中仅与叶子结点的权重有关而与其数据域无关,所以构造过程中不用考虑其数值域,并且在链表中从叶子开始存放,然后不断的将两个最小权值的子树合并为一个权值为其和的较大的子树,逐步生成各自内部结点直到树根。(2)编码的算法将建立的哈夫曼树从每个叶子结点开始沿着双亲回到根结点,每走一步进行编码得到的一个编码值,由于每个叶子结点的哈夫曼编码是从根结点到相应的叶子的路径的各个分支的代码组成的0和1序列,所以先得到了低位编码后得到高位编码因此可用一维数组从后向前来存放各位编码值。2.3ADT描述

5、1、设定哈夫曼树的抽象数据类型定义ADTHuffmantree{数据对象:D={ai

6、ai∈Charset,i=1,2,3,……n,n≥0}数据关系:R1={

7、ai-1,ai∈D,i=2,3,……n}  基本操作:  build(unsignedintcount[],intm,HuffmanTree&head);操作结果:根据i个字符及其它们的权值count[i],建立Huffman树。HuffmanCoding(u,ahead,c,i);操作结果:根据已经编译好的包含n个字符的Huffman树,将文件的代码进

8、行翻译,结果存入结构体中recoding(u,fp2);操作结果:根据建好的Huffman树,对文件进行编码,编码结果存入到文件output.txt中}ADTHuffmantree2.4功能模块分析voidHuffan_GUI();//gui界面voidout(HuffmanTreeahead);//输出voidrecoding(HuffmanTreeu,FILE*fp);//译码voidcoding(HuffmanTreeahead,FILE*fp1,FILE*&fp2);//编码voidbuild(unsignedintco

9、unt[],intm,HuffmanTree&head);//建立建立哈夫曼树voidHuffmanCoding(HuffmanTree&u,HuffmanTree&ahead,unsignedshortc[],int&i);//建立哈夫曼编码153.详细设计3.1数据存储结构设计typedefstructhtnode{unsignedshortasc;//ASC码值unsignedintweight;//结点权值unsignedshortcode[codeMax];//最大的asc码structhtnode*parent,*l

10、child,*rchild;//链表结点的父指针,左右孩子指针structhtnode*next;//指向下一个接点}HTNode,*HuffmanTree;//定义哈夫曼树结构3.2主要算法流程图(或算法代码)开始初始化哈夫曼链表且有2n-1个节点i=1I

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

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

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