长春大学课程设计(哈夫曼)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
长春大学
课程设计说明书
题目名称哈夫曼编码/ 译码器
院(系)计算机科学与技术
专业(班级)网络五班
学生姓名董迎顺
指导教师朱德新
起止日期2015.9.7-2015.9.11
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊目录
1.设计目的与任务 (1)
2.算法设计 (3)
2.1设计思想 (3)
2.2设计表示 (3)
3.用户手册 (4)
4.测试数据及测试结果 (5)
5.课程设计总结 (9)
程序清单 (9)
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊1.设计目的与任务
1.1设计目的:
(1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计力;
(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
(3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;(4)训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所具备的科学的工作方法和作风。
1.2 设计任务:
设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。
2.算法设计
2.1设计思想
(1)数据结构设计
对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构
为中心的原则划分模块,定义主程序模块和各抽象数据类型。
本程序定义了相应的结构体变量,包括weight权值,parent双亲结点,lchild左孩子,rchild右孩子。通过结构体构建哈夫曼树,实现哈夫曼的编码和译码功能。
结构体变量如下:
typedef struct//结构体
{
char data;
int weight; //权值
int parent;//双亲结点
int lchild;//左孩子
int rchild;右孩子
}HTNode;
HTNode ht[80];
功能:该结构体储存相关数据包括输入的权值weight,构建哈夫曼树所需要的双亲parent,左孩子lchild,右孩子rchild。同时建立结构体数组HTNode ht[80];
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
typedef struct
{
char cd[30]; //字符串
int start;
}
HCode;
HCode hcd[80];
功能:该结构体储存输入的字符。
(2)算法设计
本程序在运行过程中用到的算法是哈弗曼算法,它是由n个带权叶子结点构成的所有二叉树中带权路径长度最短的二叉树,根据给定的n个权值构成n 棵二叉树的集合,其中每棵二叉树中只有一个带权weight的根结点,左右子树均空,选择两棵根结点权值最小的树作为左右子树构造一棵新的二叉树,且至新的二叉树的根结点的权值为其左右子树上根结点的权值之和,即为哈夫曼树算法。本程序先定义结构体,通过创建哈弗曼树,对输入的字符进行编码和译码。
2.2设计表示
(1)函数调用关系图及其说明如下:
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊(2)函数接口说明:
函数中的参数均是使用的全局变量的传递,因而在函数间进行传递的过程中比较简单,下面就将主要函数及他们之间的参数的关系列出如下:void CodeInput(int n,HTNode ht[])//输入字符及权值进行哈夫曼编码
void CreateHCode( HTNode ht[] , HCode hcd[] , int n )//进行哈夫曼编码
void CodeOutput( int n , HCode hcd[] )函数输出哈夫曼编码。
void shuchu(HCode hcd[] , int n)//输出哈夫曼树
void save( int n)// 将其存入data.text文件中
3.用户手册
点击运行程序,在弹出的窗口中,会提示要输入的信息:
(1)界面信息:
显示5个选项,分别为
1:输入哈夫曼树
2:哈夫曼编码
3:显示哈夫曼树
4:哈夫曼权值存储
5:退出。
(2)操作:用户输入界面的1-5选项,若输入其他选项则提示("输入有误! 请输入<1 -- 5>选项),程序分别调用相关函数。
(3)用户需要输入哈夫曼树,程序会生成哈夫曼编码和哈夫曼树并显示在屏幕上,可以对哈夫曼权值保存。当退出时,选择5 直接退出。
4.测试数据及测试结果
测试数据如下:
a s d f g h
7 8 9 4 5 2
程序运行结果如下:
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
图1:菜单显示界面,选择操作类型。
图2:选择1,输入哈夫曼树,先输入所有字符然后输入权值。
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊图3:选择2,输出哈夫曼编码。图4:选择3,显示哈夫曼树。
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊图5:选择4,保存哈夫曼权值到"d:\\data.txt"。
图6:选择5,退出程序。
5.课程设计总结
在这次课程设计过程中,遇到了很多困难,之前对哈夫曼算法不是很了解,在编写源代码时有很多知识都忘了,多次翻阅课本学习,网上查找相关资料,使得编写的效率很慢。调试程序的过程中,出现了很多错误,逐个分析每一个错误,我学到了很多东西,比如一些课上没有懂的知识,我通过实践搞懂了,