2022年数据结构课设报告哈夫曼编译器C语言知识学习源码 .pdf
《2022年数据结构课设报告哈夫曼编译器C语言知识学习源码 .pdf》由会员分享,可在线阅读,更多相关《2022年数据结构课设报告哈夫曼编译器C语言知识学习源码 .pdf(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、.中南大学数据结构课程设计报告题目哈夫曼编译器学生姓名孙毅指导教师杨希学院信息科学与工程学院专业班级信息安全 1401 班名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 36 页 - - - - - - - - - .二一六 年 十一 月名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 36 页 - - - - - - - - - .目录一、课程设计目
2、的 .4二、课程设计的内容. 42.1、问题描述 .5 2.2、基本要求 .5三、 问题描述,解决的方法 . 53.1 从键盘读入字符集大小n , 以及 n 个字符和权值,建立哈夫曼树。.5 3.2 利用已建好的哈夫曼树对文件正文进行编码,将结果存入相关文件中。7 3.3 利用已建好的哈夫曼树将编码文件中的代码进行译码,结果存入文件中。.8 3.4 输出代码文件,以紧凑格式显示。.9 3.5 以直观的方式输出哈夫曼树, 同时将此字符形式的哈夫曼树写入文件中。.9四、 程序模块功能,程序设计组成框图、流程图 . 10 4.1 程序模块功能 . 10 4.2 程序设计框图 . 10 4.3 流程图
3、 . 11 五、 调试与测试。调试方法,测试结果的分析与讨论,遇到的主要问题及采取的解决措施。 . 13 5.1 调试方面 . 13 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 36 页 - - - - - - - - - .5.2 测试结果方面 . 14 六、测试结果,用几组测试数据进行测试算法设计的正确性. 14 6.1 第一组数据如下 . 14 6.2 第二组测试数据如下: . 18 七、 本次课程设计的心得体会. 21 八、 附录:源程序清单 . 22一、课程
4、设计目的数据结构是计算机专业的核心课程, 是计算机科学的算法理论基础和软件设计的技术基础, 实践性强, 课程设计是加强学生实践能力的一个重要手段。课程设计要求学生在完成程序设计的同时能够写出规范的设计报告,培养学生分析问题、解决问题,提高学生软件设计能力。二、课程设计的内容哈夫曼编译器名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 36 页 - - - - - - - - - .2.1、问题描述利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间, 降低传输成本
5、。 这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码。 对于双向传输信息的信道, 每端都需要一个完整的编译码系统。为这样的信息收发站编写哈夫曼编译系统。2.2、基本要求(1)从键盘读入字符集大小n , 以及 n 个字符和权值,建立哈夫曼树。(2)利用已建好的哈夫曼树对文件正文进行编码,将结果存入相关文件中。(3)利用已建好的哈夫曼树将编码文件中的代码进行译码,结果存入文件中。(4)输出代码文件,以紧凑格式显示。(5)以直观的方式输出哈夫曼树,同时将此字符形式的哈夫曼树写入文件中。三、问题描述,解决的方法3.1 从键盘读入字符集大小n , 以及 n 个字符和权值,建
6、立哈夫曼树。a.首先设计一个结构体,成员有权值、左右儿子、以及字符本身,再设计一个输入函数, 函数中要求输入字符集大小n,以及这 n 个字符和他们各自对应的权值。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 36 页 - - - - - - - - - .b.再根据以上的各种输入结合建立哈夫曼树的思想原理建立起哈夫曼树,设计的函数包括有两个,一个是选中最小权值的两棵树,另一个是创建哈夫曼树。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
7、 - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 36 页 - - - - - - - - - .3.2 利用已建好的哈夫曼树对文件正文进行编码,将结果存入相关文件中。a.第一步是要求用户输入待编码文件的路径,再根据路径读取待编码文件里的内容,再利用哈夫曼树将内容编码。b.将编码的结果存入文件中,文件起名为编码结果.txt ,这个工作已经在编码路径的同时并完成了。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 36 页 - - -
8、 - - - - - - .3.3 利用已建好的哈夫曼树将编码文件中的代码进行译码,结果存入文件中。a.跟(2)是一样的,先是要求用户输入待译码文件的路径,再根据路径读取待译码文件里的内容, 再利用哈夫曼树将内容进行译码,只是这里的待译码文件即是前面的编码结果 .txt 。b.在将译码结果打印到窗口的同时写进文件里面,文件命名为译码结果.txt 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 36 页 - - - - - - - - - .3.4 输出代码文件,以紧凑格式
9、显示。这一步在将编码或者译码结果进行写文件的同时已经将结果打印到了窗口。3.5 以直观的方式输出哈夫曼树,同时将此字符形式的哈夫曼树写入文件中。挨个将各个节点的内容的值打印到窗口以及写入文件,文件名为哈夫曼树.txt 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 36 页 - - - - - - - - - .四、程序模块功能,程序设计组成框图、流程图4.1 程序模块功能本编译器本人给简单的设计为四个模块,分别是:输入字符相关内容并建立哈夫曼树、 根据哈夫曼树对文件内
10、容进行编码、根据哈夫曼树对文件内容进行译码以及退出功能。4.2 程序设计框图开始从键盘输入字符相关内容并建立哈夫曼树编码译码退出名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 36 页 - - - - - - - - - .4.3 流程图i=1i!=0开始输入字符集大小n输入这 n 个字符以及权值输入序号 i 进行编码与译码及退出的选择名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -
11、- - - - - 第 11 页,共 36 页 - - - - - - - - - .no yes no Yes no yes 显示编码结果并写入文件名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 36 页 - - - - - - - - - .五、调试与测试。调试方法,测试结果的分析与讨论,遇到的主要问题及采取的解决措施。5.1 调试方面本次程序用的语言是C,在文件读写方面多多少少有些忘记了,所以本人此次的代码编写部分就大概分为两个阶段来完成的,第一个阶段就是完成建立
12、哈夫曼树、写好编码以及译码函数,和主函数;第二部分呢就是完成读写文件。在第一阶段完成后, 利用键盘输入的方式进行了编码与译码,测试还算顺利,在多次对比之下结果也鉴定为正确。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 36 页 - - - - - - - - - .在第二阶段的读写文件代码编写过程中,读文件的相关操作还算顺利, 但就是在写文件上出了不少的岔子,首先第一个问题出在字符串的定义上,开始是俩字符串死活接不上,后来字符串的定义方式改成了这样:。可算是成功的接上
13、了两个字符串, 但是后来发现,起始一个文件在打开之后关闭之前,写的内容是不会被覆盖的, 只是在再次打开并进行写操作是才会被覆盖掉,所以后来也就没有对两个字符串进行连接,只是依次写入了文件而已。这只是在进行编码过程中的写文件的一个小坎坷,后来在写译码函数时的写文件时,那是死活都写不进去,尽管是效仿编码时的写法与否,都不行,后来是将文件的打开与关闭放在了函数的外面才可行的,但应该不是直接的原因, 具体是怎么样现在也想不起来了, 所以现在开始意识到在写代码的过程中写一份记录程序进程文档是很有必要的。5.2 测试结果方面在测试结果这方面,由于完完全全是一步一步的按照课程设计的要求来写的所以也不存在一些
14、意想不到的错误,出了在写文件上花了些脑筋意外,测试还算顺利。六、测试结果,用几组测试数据进行测试算法设计的正确性6.1 第一组数据如下字符集大小 n=3 ;字符本身以及权值分别为:a,b,c 和 2,1,3;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 36 页 - - - - - - - - - .待编码文件内容为: aaaaaabbbbbbcccccc。哈夫曼树 .txt 的内容为:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
15、- - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 36 页 - - - - - - - - - .选择编码并输入带编码文件的路径:按回车键进行编码:查看待编码以及编码结果两个文件的内容进行验证:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 36 页 - - - - - - - - - .选择译码并输入带编码文件的路径:按回车键进行译码:查看译码结果文件夹进行验证:选择 3 看有什么情况:名师资料总结 - - -精品资料欢迎下载
16、 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 36 页 - - - - - - - - - .选择退出:6.2 第二组测试数据如下:字符集大小 n=6 ;自负本身以及权值分别是:a,b,c,d,e,f 和 9,0,1,3,2,5 ;待编码文件内容为: aaabbbcccdddeeefff。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 36 页 - - - - - - - - - .
17、查看哈夫曼树 .txt 文件:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 36 页 - - - - - - - - - .选择 1 编码并输入待编码文件的路径:回车进行编码:查看待编码和编码结果俩个文件进行验证:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 36 页 - - - - - - - - - .选择 2 译码并输入待译码文件的路径
18、:回车进行译码:查看译码结果文件进行验证:七、本次课程设计的心得体会本次课程设计的心得主要是在文件的相关操作的学习上,之前是没有怎么学文件的相关操作,通过本次的课程设计,本人对C 语言的文件的相关操作有了相当的了解, 并成功的完成了课程设计所要求的文件的读写功能,可以说是有很大的收获的,不仅仅是在文件操作的这一单方面。在完成一个课题之前,要仔细理解课题要求。我在此次课程设计中犯的最名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 36 页 - - - - - - - -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据结构课设报告哈夫曼编译器C语言知识学习源码 2022 数据结构 报告 哈夫曼 编译器 语言 知识 学习 源码
限制150内