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

  • 5
  • 0
  • 约7.9千字
  • 约 13页
  • 2019-03-06 发布于浙江
  • 举报
长 春 大 学 课 程 设 计 说 明 书 题目名称 哈夫曼编码/ 译码器 院(系) 计算机科学与技术 专业(班级) 网络五班 学生姓名 董迎顺 指导教师 朱德新 起止日期 2015.9.7-2015.9.11 目 录 TOC \o 1-3 \h \z \u HYPERLINK \l _Toc429730717 1.设计目的与任务 PAGEREF _Toc429730717 \h 1 HYPERLINK \l _Toc429730718 2.算法设计 PAGEREF _Toc429730718 \h 3 HYPERLINK \l _Toc429730719 2.1设计思想 PAGEREF _Toc429730719 \h 3 HYPERLINK \l _Toc429730720 2.2设计表示 PAGEREF _Toc429730720 \h 3 HYPERLINK \l _Toc429730721 3.用户手册 PAGEREF _Toc429730721 \h 4 HYPERLINK \l _Toc429730722 4.测试数据及测试结果 PAGEREF _Toc429730722 \h 5 HYPERLINK \l _Toc429730723 5.课程设计总结 PAGEREF _Toc429730723 \h 9 HYPERLINK \l _Toc429730724 程序清单 PAGEREF _Toc429730724 \h 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)函数调用关系图及其说明如下: 哈夫曼编/译码器 哈夫曼编/译码器 主函数main() 初始化哈弗曼树 初始化哈弗曼树CreateHT() 输入CodeInput()显示哈夫曼树 输入 CodeInput() 显示哈夫曼树 Shuchu() 哈夫曼编码 CreateHCode() 保存save() 保存save() 结束 结束 exit() (2)函数接口说明: 函数中的参数均是使用的全局变量的传递,因而在函数间进行传递的过程 中比较简单,下面就将主要函数及他们之间的参数的关系列出如下: void CodeInput(int n,HTNode ht[])/

文档评论(0)

1亿VIP精品文档

相关文档