长春大学课程设计(哈夫曼)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.课程设计总结

在这次课程设计过程中,遇到了很多困难,之前对哈夫曼算法不是很了解,在编写源代码时有很多知识都忘了,多次翻阅课本学习,网上查找相关资料,使得编写的效率很慢。调试程序的过程中,出现了很多错误,逐个分析每一个错误,我学到了很多东西,比如一些课上没有懂的知识,我通过实践搞懂了,

相关文档
最新文档