哈夫曼树课程设计

中南林业科技大学

课程设计报告

设计名称: 数据结构课程设计

姓 名: 王昆 学 号: 20094282

专业班级: 2009级软件工程

系 (院): 计算机与信息工程学院

设计时间: 2010~2011学年第二学期

设计地点: 电子信息楼 机房

数据结构课程设计报告 第 1 页,共 26页

数据结构课程设计报告 。第4页,共26 页二 概要设计程序流程图图 14

数据结构课程设计报告第5页,共26 页三 详细设计 1、哈夫曼树结点结构定义 、struct hfmnode { char nValue;//节点值 int weight;//权值 int pnIndex;//父结点下标 int lchildIndex,rchildIndex;//左右孩子的结点下标 };哈夫曼树类定义 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);//查询最小的两个结点 };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) 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) 5 检查输入的字符值是否合法 bool isChar(const string& str) 6输出哈夫曼树,字符,权值,以及它对应的编码 void huffmanTree::Output(huffmanTree ht,int n)5

数据结构课程设计报告第6页,共26 页3、源程序 、#include using namespace std; struct hfmnode//哈夫曼树结点结构定义 { char nValue;//节点值 int weight;//权值 int pnIndex;//父结点下标 int lchildIndex,rchildIndex;//左右孩子的结点下标 }; 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);//查询最小的两个结点 };//在数组 hfmNode 中从 O 开始到 pos 位置,查找哈夫曼树外的权值最小的两个结点的位置 void huffmanTree::select(int pos,int &nodeOne,int &nodeTwo) { long w1,w2; w1=w2=88888; for(int i=0;i

数据结构课程设计报告} for(int j=0;j

数据结构课程设计报告char *cd; cd=new char[n];//用于存储哈夫曼编码的动态空间 cd[n-1]='\0';//编码结束符第8页,共26 页cout

数据结构课程设计报告} cout

数据结构课程设计报告int n=5;//字符和权值个数 cout>n; char str['n']; // str[n-1]='\0'; char g; char str2[2000];//存储哈夫曼编码 int w[26]; huffmanTree obj; cout>str; //输入字符不合法 while(isChar(str)==0||strlen(str)!=n) { cout>str; } //////////////////////////////////////////// // Output(); //////////////////////////////////////////////第10页,共26 页int n=strlen(str); cout>w[i]; cout>m; switch(m) { case 0: { obj.creatHfmTree(str,w,n);10//

数据结构课程设计报告obj.Output(obj,n);///////////////////////////////////////////OUTput cout>str2; cout

数据结构课程设计报告第12页,共26 页四 设计与调试分析从上面的程序可以看出,有些地方时没有办法限制的,比如说输入整型变量的时候,没有办法限制其不能输入字符型。 在调试的过程中所遇到的问题很多。五 用户手册1 本程序可以在 vc++5.0 和 vc++6.0 的环境下运行。 2 在 vc 中创建一个工程,将源程序复制到.cpp 中,编译链接就可以。 3 选择编译、运行以后会出现运行界面,选择相应的选项,根据提示即可进行演示。界面如下:4、请如数字符集大小 n,就是要求用户输入哈夫曼树叶子结点的个数六 测试成果12

数据结构课程设计报告第13页,共26 页13

数据结构课程设计报告第14页,共26 页14

数据结构课程设计报告第15页,共26 页测试结束八.课程设计心得 课程设计心得15

数据结构课程设计报告 第 16 页,共 26 页 我相信经过短短几天除了吃饭,睡觉,上课就天天坐在电脑面前编程,那编程水平没有提高是绝对不可 能的,让你每天 24 小时有 18 个小时是坐在电脑面前编程,我相信,你一定会成为一出类拔萃的程序员。设计 心得,时间太短,忙不过来,同时要设计的东西太多,这个和知识学的不精也有关系,如果给充分的时间,我 相信没有什么解决不了的!谢谢老师的指导!16

中南林业科技大学

课程设计报告

设计名称: 数据结构课程设计

姓 名: 王昆 学 号: 20094282

专业班级: 2009级软件工程

系 (院): 计算机与信息工程学院

设计时间: 2010~2011学年第二学期

设计地点: 电子信息楼 机房

数据结构课程设计报告 第 1 页,共 26页

数据结构课程设计报告 。第4页,共26 页二 概要设计程序流程图图 14

数据结构课程设计报告第5页,共26 页三 详细设计 1、哈夫曼树结点结构定义 、struct hfmnode { char nValue;//节点值 int weight;//权值 int pnIndex;//父结点下标 int lchildIndex,rchildIndex;//左右孩子的结点下标 };哈夫曼树类定义 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);//查询最小的两个结点 };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) 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) 5 检查输入的字符值是否合法 bool isChar(const string& str) 6输出哈夫曼树,字符,权值,以及它对应的编码 void huffmanTree::Output(huffmanTree ht,int n)5

数据结构课程设计报告第6页,共26 页3、源程序 、#include using namespace std; struct hfmnode//哈夫曼树结点结构定义 { char nValue;//节点值 int weight;//权值 int pnIndex;//父结点下标 int lchildIndex,rchildIndex;//左右孩子的结点下标 }; 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);//查询最小的两个结点 };//在数组 hfmNode 中从 O 开始到 pos 位置,查找哈夫曼树外的权值最小的两个结点的位置 void huffmanTree::select(int pos,int &nodeOne,int &nodeTwo) { long w1,w2; w1=w2=88888; for(int i=0;i

数据结构课程设计报告} for(int j=0;j

数据结构课程设计报告char *cd; cd=new char[n];//用于存储哈夫曼编码的动态空间 cd[n-1]='\0';//编码结束符第8页,共26 页cout

数据结构课程设计报告} cout

数据结构课程设计报告int n=5;//字符和权值个数 cout>n; char str['n']; // str[n-1]='\0'; char g; char str2[2000];//存储哈夫曼编码 int w[26]; huffmanTree obj; cout>str; //输入字符不合法 while(isChar(str)==0||strlen(str)!=n) { cout>str; } //////////////////////////////////////////// // Output(); //////////////////////////////////////////////第10页,共26 页int n=strlen(str); cout>w[i]; cout>m; switch(m) { case 0: { obj.creatHfmTree(str,w,n);10//

数据结构课程设计报告obj.Output(obj,n);///////////////////////////////////////////OUTput cout>str2; cout

数据结构课程设计报告第12页,共26 页四 设计与调试分析从上面的程序可以看出,有些地方时没有办法限制的,比如说输入整型变量的时候,没有办法限制其不能输入字符型。 在调试的过程中所遇到的问题很多。五 用户手册1 本程序可以在 vc++5.0 和 vc++6.0 的环境下运行。 2 在 vc 中创建一个工程,将源程序复制到.cpp 中,编译链接就可以。 3 选择编译、运行以后会出现运行界面,选择相应的选项,根据提示即可进行演示。界面如下:4、请如数字符集大小 n,就是要求用户输入哈夫曼树叶子结点的个数六 测试成果12

数据结构课程设计报告第13页,共26 页13

数据结构课程设计报告第14页,共26 页14

数据结构课程设计报告第15页,共26 页测试结束八.课程设计心得 课程设计心得15

数据结构课程设计报告 第 16 页,共 26 页 我相信经过短短几天除了吃饭,睡觉,上课就天天坐在电脑面前编程,那编程水平没有提高是绝对不可 能的,让你每天 24 小时有 18 个小时是坐在电脑面前编程,我相信,你一定会成为一出类拔萃的程序员。设计 心得,时间太短,忙不过来,同时要设计的东西太多,这个和知识学的不精也有关系,如果给充分的时间,我 相信没有什么解决不了的!谢谢老师的指导!16


相关文章

  • 哈夫曼编码译码器1
  • 滁州学院 课程设计报告 课程名称: 数据结构 设计题目: 哈夫曼编码译码器 系 别: 计算机科学与技术 专 业: 网络工程 组 别: 第十组 起止日期: 2011年4月28日 ~2011年5月23日 指导教师: 计算机科学与技术系2010年 ...查看


  • 数据结构 哈夫曼编码器课程设计报告
  • 课程设计报告 一. 需求分析 1. 一个完整的系统应具有以下功能: (1) (2) I :初始化(Initialization ).从终端读入字符集大小n ,以及n 个字符和n 个权值,建立哈夫曼树,并将它存于文件hfmTree 中. E ...查看


  • 数据结构A教学大纲
  • 数据结构A 教学大纲 (Data Structures A) 课程编号: 06311360 学 分: 5.0 学 时: 75 (其中:讲课学时:60 实验学时:0 上机学时:15) 先修课程:离散数学.程序设计基础.面向对象程序设计 适用专 ...查看


  • 哈夫曼编码_贪心算法
  • 淮海工学院计算机工程学院 实验报告书 课程名: <算法分析与设计> 题 目: 实验3 贪心算法 班 级: 软件102班 学 号: 姓 名: 鹿 迅 实验3 贪心算法 实验目的和要求 (1)了解前缀编码的概念,理解数据压缩的基本方 ...查看


  • 拓扑排序课程设计
  • 长沙理工大学 <数据结构>课程设计报告 赵思雨 学 院 计算机与通信工程 专 业 网络工程 班 级 网络1101班 学 号 [1**********]0 学生姓名 赵思雨 指导教师 乐晓波 课程成绩 完成日期 课程设计任务书 计 ...查看


  • 哈夫曼编码译码器实验报告
  • <数据结构>课程设计报告 QFileInfo hufFileInfo; }; HuffView负责具体画图 class HuffView : public QGraphicsView { Q_OBJECT public: exp ...查看


  • 数据结构研究论文
  • 计算机数据结构研究论文 题目: 院系: 计算机科学与信息工程系 专业: 网 络 工 程 班级: (1)班 姓名: 侯 三 杰 学号: 日期: Huffman 编码器与Joseph 约瑟夫环 .Huffman编码器 1. 问题描述: 给出一个 ...查看


  • 实验报告2_二叉树及哈夫曼编码
  • 实 验 报 告 ( 2013/ 2014 学年 第 二 学期)  课程名称 数据结构A 实验名称 实验二 二叉树的基本操作及哈夫曼编码译码系统 的实现 实验时间 2014 年 4 月 8 日 指导单位 计算机学院计算机软件教学中心 ...查看


  • 数字图像与模式识别
  • 实验一 MATLAB图像处理基本操作 一.实验目的 1. 掌握MATLAB 语言中图象数据与信息的读取方法: 2. 掌握图像灰度调整 二.实验要求 1.打开一个BMP 文件 2. 将其局部区域的灰度值进行改变 3. 另存为一个新的BMP 文 ...查看


热门内容