哈夫曼树课程设计
1) 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数; 2) 完成最低要求:完成功能 1; 3) 进一步要求:完成功能 2 和 3。有兴趣的同学可以自己扩充系统功能。
要求: 1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编 制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准备工作完备与否直接影响到后序上机调试工作 的效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。 2、设计的题目要求达到一定工作量(300 行以上代码),并具有一定的深度和难度。
哈夫曼树类定义 class huffmanTree{ public: void code(char nvalue[],int w[],int n); //对叶子结点编码 void decode(char nvalue[],char hfmcode[],int n);//对叶子结点译码 void Output(huffmanTree ht,int n);//输出哈夫曼树 //private: hfmnode hfmNode[2000];//用数组存储哈夫曼结点 void creatHfmTree(char nvalue[],int w[],int n);//创建哈夫曼树 void select(int pos,int &nodeOne,int &nodeTwo);//查询最小的两个结点 };
.
1.课程设计目的
1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。 2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; 3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 4.训练用系统的观点和软件开发一般规进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他 们严谨的科学态度和良好的工作作风。
..
.专业
..
.
. .. .
.
3、程序设计语言推荐使用 C/C++,程序书写规,源程序需加必要的注释;
4、每位同学需提交可独立运行的程序;
5 、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规、容充实,不少于 10 页(代码不算);
6、课程设计实践作为培养学生动手能力的一种手段,单独考核
.
. .. .
.
中南林业科技大学 课程设计报告
设计名称:
数据结构课程设计
姓 名: 王昆
学 号: 20094282
专业班级:
2009 级软件工程
系 (院):
计算机与信息工程学院
设计时间:
2010~2011 学年第二学期
设计地点:
电子信息楼 机房
指导教师评语:
成绩:
签名:
年月日
..
.专业
..
.
. .. .
3.课程设计说明书
一 需求分析
要求用到数据结构课上学到的线性表的知识,所以就要充分而清晰的理解关于线性表的知识。 要现的基本功能很简单,只有删除和插入,增加功能也不过是加上修改。这些在数据结构课上已经讲过,只要能够理解 关于线性表的几个相关的基本算法就可以了。 问题是将输入的信息保存入文件和从文件输出。这里基本是自学的容,而且要考虑到是否要自行选择保存的磁盘。 综上,做这个课题,要具备的知识就是线性表的基本算法,文件的保存和读取算法,必要的 C 或者 C++知识(本次我将 使用 C 实现),以及丰富的程序调适经验。
..
.专业
..
.
. .. .
.
2.课程设计任务与要求:
任务 . 哈夫曼树应用
功能: (1) 从终端读入字符集大小 n,以及 n 个字符和 n 个权值,建立哈夫曼树并将它存于文件 hfmTree 中.将已在存
哈夫曼树 以直观的方式(比如树)显示在终端上; (2) 利用已经建好的哈夫曼树(如不在存,则从文件 htmTree 中读入),对文件 ToBeTran 中的正文进行编码, 将结果存 入文件 Cod eFile 中,并输出结果,将文件 CodeFile 以紧凑格式先是在终端上,每行 50 个代码。同时将 符形式的 编码文件写入文件 CodePrint 中。 (3) 利用已建好的哈夫曼树将文件 CodeFile 中的代码进行译码,结果存入文件 TextFile 中,并输出结果。 分步实施:
3 求哈夫曼树的编码 nvalue 是结点值数组,w 是权值数组 n 是叶子结点的个数 void huffmanTree::code(char nvalue[],int w[],int n)
4 哈夫曼译码 nvalue 为结点值数组 hfmcode 为哈夫曼编码,n 个叶子结点 void huffmanTree::decode(char nvalue[],char hfmcode[],int n)
2、主要函数及相关功能
1 在数组 hfmNode 中从 O 开始到 pos 位置,查找哈夫曼树外的权值最小的两个结点的位置 void huffmanTree::select(int pos,int &nodeOne,int &nodeTwo)
2 创建哈夫曼树,nvalue 是结点值,w 是权值,n 是叶子结点的个数 void huffmanTree::creatHfmTree(char nvalue[],int w[],int n)
5 检查输入的字符值是否合法 bool isChar(const string& str)
6 输出哈夫曼树,字符,权值,以及它对应的编码 void huffmanTree::Output(huffman
. .. .
.
3、源程序
#include<iostream> using namespace std;
..
.专业
..
.
。
二 概要设计
程序流程图
. .. .
.
图1
..
.专业
..
.
三 详细设计
. .. .
.
1、哈夫曼树结点结构定义
struct hfmnode {
char nValue;//节点值 int weight;//权值 int pnIndex;//父结点下标 int lchildIndex,rchildIndex;//左右孩子的结点下标 };