哈夫曼编码航空报告.docVIP

  • 23
  • 0
  • 约4.78千字
  • 约 13页
  • 2017-08-23 发布于河南
  • 举报
西安郵電學院 目: 1. 哈夫曼编/译码器 2. 航空客运订票系统 系部名称 : 专业名称 : 班 级 : 学号 : 学生姓名 : 指导教师 : 时间 : 2009年12月16日 至2009年12月25日 西安郵電學院 课程设计目的 哈夫曼树应用到信息编码中,以二进制的0,1序列来传送信息,最后应 译码系统对0,1代码进行翻译使之转化为原本的信息,通过课程设计是学生进一步加深对树,哈夫曼树等知识的理解,培养学生的实践能力。 二、课程设计内容 利用所学过的知识,利用哈夫曼树设计一个哈夫曼编码译码器。 三、需求分析 1.读取文本文件Soucefile,并统计文件中字符出现频度建立哈夫曼树: 2.以统计得到的字符集及其频度作为权值,建立哈夫曼树。 3.利用已建立好的哈夫曼树,获得各个字符的哈夫曼编码,并对正文进行编码,然后输出编码结果,并存入文件Codefile中。 4.利用已建立好的哈夫曼树将文件Codefile中的代码进行译码,并输出译码结果,并存入文件Decodefile中: 5.比较源文件Soucefile和译码后的文件Decode是否一致。 四、概要设计 1.系统结构图(功能模块图) 2.功能模块说明 (1)input:创建Souceile.txt文件,给文件中存入字符。 (2)account():读取文本文件(Soucefile.txt),并统计文本文件中的字符,将字符和相应的频度存入数组。 (3)creatree():建立huffman树,根据所统计出的字符和频度数,首先选择权值最小的和次小的结点逐步创建Huffman树。 (4)encode():对文件Soucefile.txt进行huffman编码.首先根据建好的Huffman树,得到每个字符的编码序列存入数组中;然后对文本文件进行编码,并将编码结果存入到新文件(Codefile.txt): (5)Decode():读取存储编码的文件(Codefile.txt),根据所读取的编码文件中的每个字符(0、1),利用先前建立的Huffman树进行解码,并将解码后的每个字符结果存入到新文件(Decode.txt)。 (6)compfile():比较原文本与解码后文件是否相同。 如果相同则输出提示信息译码成功,不同则译码失败。 五、详细设计及运行结果 1.函数之间相互调用的图示 ,程序设计及编码, 运行结果。 2. 流程图。 Account() Creattree() Encode() 六、调试情况,设计技巧及体会 1、在调试过程中。 我总体认为它所实现的功能都是基本的功能,可以对所创建的文件进行统计字符数和频度,以此来建立哈夫曼树,利用哈夫曼树对源文件中的内容进行编码处理,并且输出编码信息,再利用哈夫曼树对编写的0,1代码进行译码处理。 改进方案:对统计字符和字符频度的函数中,可以不将w[i].data强制转化为char型,因为内存中本身就以字符的ASCII码值存储字符的,另外可以将哈夫曼树的权值,根结点,左孩子,右孩子等信息显示在屏幕上。 2、在设计过程中的感受。 我觉得哈夫曼编码译码器在设计中,首先在创建文件中,如果我写上判断文件是否为空的条件,就会输出文件不能打开的信息,后来,我发现将此判断代码删去后,可以顺利进行将信息写入文件中;另外在建立哈夫曼树时,由于我在while循环的判断条件括号后多加了一个分号,导致建立不起来哈夫曼树,后来经过调试才知道错误原因,编码开始时,我将对单个字符的编码另外写在了一个函数getcode中,由于参数传递不正确,以致无法完成编码,后来我将getcode函数内容写入encode函数,得到正确编码。相比而言,我写的译码函数比较顺利,在比较两文件内容是否一致时,由于我以写的方式打开了Decode.txt文件,且开始设置标志域i=1为译码成功提示,所以不管我的Decode.txt文件中是否有内容都会输出译码正确,后来经过检查改正得到了正确的提示信息,总体感觉哈夫曼编码译码器的设计是比较难的,在写代码过程中遇到一些问题。 七、参考文献 《C语言程序设计》王曙燕等 科学出版社 《数据结构——使用C语言》陈一华等 电子科技大学出版社 《数据结构题集》严蔚敏,吴伟民 清华大学出版社 《C语言程序设计》谭浩强 清华大学出版社 八、附录:源代码 (略,详见电子版实验报告) 题目二:航空客运订票系统 一、 课程设计目的 通过学生设计航空客运订票系统,使学生更加清楚地了解关于文件的创建,以及如何将信息读,写进入文件,另外让学生熟悉栈和队列的应用,以及

文档评论(0)

1亿VIP精品文档

相关文档