学号 姓名 指导教师 课程设计报告参考

发布 2019-07-22 02:01:55 阅读 8891

哈尔滨理工大学。

课程设计。数据结构)

题目。班级: 计算机科学与技术计14-9

姓名: 杨永强 1404010927

指导教师: 赵之莉。

系主任: 林克正。

2023年03月10日。

一.问题的描述及设计的目的。

设计一个哈夫曼编码、译码系统。对一个ascii编码的文本文件中的字符进行哈夫曼编码,生成编码文件;反过来,可将编码文件译码还原为一个文本文件。

1) 从文件中读入任意一篇英文短文(文件为ascii编码,扩展名为txt);

2) 统计并输出不同字符在文章**现的频率(空格、换行、标点等也按字符处理);

3) 根据字符频率构造哈夫曼树,并给出每个字符的哈夫曼编码;

4) 将文本文件利用哈夫曼树进行编码,存储成压缩文件(编码文件后缀名。huf)

5) 用哈夫曼编码来存储文件,并和输入文本文件大小进行比较,计算文件压缩率;

6) 进行译码,将huf文件译码为ascii编码的txt文件,与原txt文件进行比较。

根据上述过程可以知道该编码译码器的关键在于字符统计和哈夫曼树的创建以及解码。

哈夫曼树的理论创建过程如下:

一、构成初始集合。

对给定的n个权值构成n棵二叉树的初始集合f=,其中每棵二叉树ti中只有一个权值为wi的根结点,它的左右子树均为空。

二、选取左右子树。

在f中选取两棵根结点权值最小的树作为新构造的二叉树的左右子树,新二叉树的根结点的权值为其左右子树的根结点的权值之和。

三、删除左右子树。

从f中删除这两棵树,并把这棵新的二叉树同样以升序排列加入到集合f中。

四、重复二和三两步,重复二和三两步,直到集合f中只有一棵二叉树为止。

因此,有如下分析:

1. 我们需要一个功能函数对ascii码的初始化并需要一个数组来保存它们;

2. 定义代表森林的数组,在创建哈夫曼树的过程当中保存被选中的字符,即给定报文**现的字符,模拟哈夫曼树选取和删除左右子树的过程;

3. 自底而上地创建哈夫曼树,保存根的地址和每个叶节点的地址,即字符的地址,然后自底而上检索,首尾对换调整为哈夫曼树实现哈弗曼编码;

4. 从哈弗曼编码文件当中读入字符,根据当前字符为0或者1的状况访问左子树或者右孩子,实现解码;

5. 使用文件读写操作哈夫曼编码和解码结果的写入;

二.应具备的功能。

1. 定义结构体类型的signode 作为哈夫曼树的节点,定义结构体类型的hufnode 作为哈夫曼编码对照表的节点,定义hfm类实现对哈夫曼树的创建,利用其成员函数完成哈夫曼编码译码的工作。

2. 定义signode 类型的全局数组sn[256](为方便调用,之后的forest[256],hufnode[256]均为全局数组), 保存ascii编码的字符,是否在文章**现(bool类型)以及出现次数(int类型,权重),左右孩子节点位置,父节点位置信息;

3. 为节省存储空间,定义signode * 类型的全局数组forest[256], 模拟森林,在创建哈夫曼树的过程中保存出现字符的指针,模拟哈夫曼树选取和删除左右子树的过程;

4. 定义hufnode 类型的全局数组hufnode[256],在编码时最为哈夫曼编码对照表的节点,char 型c保存字符,int code[100]保存其哈夫曼编码;

5. 定义hfm类,主要保存哈夫曼树的根节点指针,但其丰富的功能函数将实现哈夫曼编码译码的工作及其他功能;

三.设计思想。

四.环境和工具。

五.详细设计(源程序清单)

六.结果分析及算法评价。

PLC课程设计报告

南京工程学院。课程设计说明书 题目交通信号灯与自动刀库控制实验 课程名称机床电气与plc 专业机械设计制造及其自动化。班级。学生姓名。同组学生。学号。设计地点基础楼c210 指导教师。工业中心。设计起止时间 2013年11月18日至2013年11月29日。交通信号灯自动控制。1 设计目的与任务2 2...

课程设计总结报告

一 课程名称 数字电子钟的设计。二 内容 设计并制作一台数字电子钟,完成设计说明书。三 设计内容及要求 设计内容 要求由所学的数字电子知识以及查阅有关资料设计并制作出一台数字电子钟。而且要完成电路的装配和调试。设计基本框图如下 要求 1 采用位数码管,显示范围0分00秒 9分59秒。2 提出至少两种...

课程设计报告和总结

小组课程设计报告。小组成员 姓名班级学号 姓名班级学号 1 前言。介绍选题的背景 意义。参考了哪些文献和信息系统。数据库系统的名称是什么,该数据库系统有什么特点和主要功能,能解决什么现实问题。2 需求分析。2.1 用户分析。2.2 功能需求。2.3 性能需求。2.4 运行环境。3 数据库设计。3.1...