中南林业科技大学
课程设计报告
设计名称: 数据结构课程设计
姓 名: 王昆 学 号: 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