简介:适合等于数据结构论文写作的大学硕士及相关本科毕业论文,相关等于数据结构开题报告范文和学术职称论文参考文献下载。
课程设计说明书
题目: 哈夫曼编码/译码器
院 系: 计算机系
专业班级: 计算机04-2班
学 号: 200413466
学生姓名: 王 乾 龙
指导教师:
2007年 1月 14 日
安徽理工大学课程设计(论文)任务书
计算机科学与工程 院系 计算机软件 教研室
学 号 200413466 学生姓名 王乾龙 专业(班级) 计算机04-2 设计题目 哈夫曼编码/译码器 设
计
技
术
参
数
系统平台Windows XP
开发工具VC++
设
计
要
求 选择某种可视化编程语言编写出人机交互界面.
执行某种遍历算法时可人工输入数字,也可系统自己产生随机数据排序.
执行结果正确无误.
综合运用多种编程技术. 工
作
量 1,说明书说明文字不少于2000字.
2,编程代码不少于300行. 工
作
计
划
第1天:先和小组成员一起讨论要做的设计,并分工找相关资料.
第2天:各个成员开始用VC++语言编写相关部分的函数.
第3天:完成源程序的设计,并实现代码间的连接,运行程序.
第4天:组员认真讨论以改进算法实现,完善操作.
第5天:演示课程设计结果,听取指导教师的意见与建议. 参
考
资
料 《数据结构》(第二版) 严蔚敏 吴伟民 清华大学出版社
《数据结构题集》(第二版) 严蔚敏 吴伟民 清华大学出版社
《VC++程序设计》 朱晴婷 黄海鹰 陈莲君 清华大学出版社
指导教师签字 教研室主任签字 2007年 01月 08日
指导教师评语:
成绩:
指导教师:
年 月 日
安徽理工大学课程设计(论文)成绩评定表
摘 要
随着计算机的普遍应用与日益发展,其应用早已不局限于简单的数值运算,而涉及到问题的分析,数据结构框架的设计以及设计最短路线等复杂的非数值处理和操作.算法与数据结构的学习就是为以后利用计算机资源高效地开发非数值处理的计算机程序打下坚实的理论,方法和技术基础.
算法与数据结构旨在分析研究计算机加工
结构体等于结构体:数据结构01a
30340;数据对象的特性,以便选择适当的数据结构和存储结构,从而使建立在其上的解决问题的算法达到最优.数据结构是在整个计算机科学与技术领域上广泛被使用的术语.它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构.数据结构有逻辑上的数据结构和物理上的数据结构之分.逻辑上的数据结构反映成分数据之间的逻辑关系,而物理上的数据结构反映成分数据在计算机内部的存储安排.数据结构是数据存在的形式.
《数据结构》主要介绍一些最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论.数据结构是介于数学,计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计,数据库,操作系统,编译原理及人工智能等的重要基础,广泛的应用于信息学,系统工程等各种领域.
学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理.通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高.
目录
摘 要 4
目录 5
一.设计目的 5
二.需求分析 6
2.1哈夫曼编码/译码器简介 6
2.2需求分析 6
三.概要设计 7
3.1问题分析哈夫曼树的定义 7
四.详细设计 7
4.1编码函数 7
4.2译码函数 9
4.3运行结果 10
五.调试分析 12
六.小结 12
参考文献 13
/译码器简介
举例说明,先前快速远距离通信的主要手段是电报,即将需传送的文字转换成由二进制的字符组成的字符串.在传送电文时,希望总长尽可能地短,如果对每个字符设计长度不等的编码,且让电文中出现次数较多的字符采用尽可能短的编码,以减少经费.哈夫曼树就是根据此原理设计出来的一种存储结构.
本次要做的哈夫曼编码/译码器的主要功能是:运用二叉树来设计二进制的前缀编码.若给一个文件,先统计文件中每个字符出现的频数,即作为此字符的权值,然后将里面的字符编码成相应的哈夫曼编码;反之,根据哈夫曼译码原理把所给二进制数编译成对应的字符串.
2.2需求分析
(1)编写相应的源代码.
(2)要求能实现编码/译码功能.
(3)演示程序以人机对话的形式进行.每次测试显示正确的结果.
(4)界面友好,易与操作.
三.概要设计
3.1问题分析哈夫曼树的定义
typedef struct Huffmantree
{
char ch; /*键值*/
int weight,mark; /*weight为权值,mark为标志域*/
struct Huffmantree *parent,*lchild,*rchild,*next; /*结构指针*/
}Hftree,*linktree;
使用链树存储,然后分别调用统计频数函数,排序函数,建立哈夫曼函数,编码函数,译码函数来实现功能.
四.详细设计
4.1编码函数
以下是源程序中实现编码的部分:
void Huffmancoding(linktree tree)
{
int index等于0;
char *code;
linktree ptr等于tree;
code等于(char *)malloc(10*sizeof(char)); /*此数组用于统计哈夫曼编码*/
printf("字符以及它的相应权数---------哈夫曼编码\n\n");
if(ptr等于等于NULL)
{
cout<<"哈夫曼树是空的!\n";
exit(0);
}
else
{
while(ptr->lchild&&ptr->rchild&&ptr->mark等于等于0)
{
while(ptr->lchild&&ptr->lchild->mark等于等于0)
{
code[index++]等于'0';
ptr等于ptr->lchild;
if(!ptr->lchild&&!ptr->rchild //打印哈夫曼树中的结点
{
ptr->mark等于1;
code[index]等于'\0';
printf("\tw[%c]等于%d\t\t\t",ptr->ch,ptr->weight);
for(index等于0;code[index]!等于'\0';index++)
printf("%c",code[index]);
printf("\n"); ;
ptr等于tree;
index等于0;
}
}
if(ptr->rchild&&ptr->rchild->mark等于等于0)
{
ptr等于ptr->rchild;
code[index++]等于'1';
}
if(!ptr->lchild&&!ptr->rchild)
{
ptr->mark等于1;
code[index++]等于'\0';
printf("\tw[%c]等于%d\t\t\t",ptr->ch,ptr->weight);
for(index等于0;code[index]!等于'\0';index++)
printf("%c",code[index]);
printf("\n");
ptr等于tree;
index等于0;
}
if(ptr->lchild->mark等于等于1&&ptr->rchild->mark等于等于1)
{
ptr->mark等于1;
ptr等于tree;
index等于0;
}
}
}
printf("\n");
free(code);
}
4.2译码
以下函数是源程序中实现译码部分:
void decode(linktree tree,char code[])
{
int i等于0,j等于0;
char *char0_1;
linktree ptr等于tree;
char0_1等于(char *)malloc(10*sizeof(char)); /*此数组用于统计输入的0,1序列*/
printf("哈夫曼编码-----相应字符\n\n");
for(j等于0,ptr等于tree;code[i]!等于'\0'&&ptr->lchild&&ptr->rchild;j等于0,ptr等于tree)
{
for(j等于0;code[i]!等于'\0'&&ptr->lchild&&ptr->rchild;j++,i++)
{
if(code[i]等于等于'0')
{
ptr等于ptr->lchild;
char0_1[j]等于'0';
}
if(code[i]等于等于'1')
{
ptr等于ptr->rchild;
char0_1[j]等于'1';
}
}
if(!ptr->lchild&&!ptr->rchild)
{
char0_1[j]等于'\0';
for(j等于0;char0_1[j]!等于'\0';j++)
printf("%c",char0_1[j]);
printf("%c",ptr->ch);
}
if(code[i]等于等于'\0'&&ptr->lchild&&ptr->rchild)
{
char0_1[j]等于'\0';
printf("没有与最后的几个0,1序列:%s相匹配的字符!\n",char0_1);
return;
}
}
free(char0_1);
}
4.3运行结果
根据此次实验的设计需求及原理,我们编写出相应的源代码,在运行时可以得到相应的功能:
如下图的界面所示:此界面中显示3种选择,可以分别执行不同的部分,由此看出,选择序号1可以进入编码界面,会提示输入字符串,按回车键即可输出与之对应哈夫曼编码.
图4-1 编码界面
与之相对应的,下图则显示的是译码界面,即选择序号2时,根据提示,输入一串二进制数,即可编译成对应的字符:
图4-2译码界面
五.调试分析
在我自己课程设计中,就在编写好源代码后的调试中出现了不少的错误,遇到了很多麻烦及困难,我的调试及其中的错误和我最终找出错误,修改为正确的能够执行的程序中,通过分析,我学到了:
(1)在定义头文件时可多不可少,即我们可多写些头文件,肯定不会出错,但是若没有定义所引用的相关头文件,必定调试不通过;
(2)在执行译码操作时,不知什么原因,总是不能把要编译的二进制数与编译成的字符用连接号连接起来,而是按顺序直接放在一起,视觉效果不是很好.还有就是,很遗憾的是,我们的哈夫曼编码/译码器没有像老师要求的那样完成编一个文件的功能,这是我们设计的失败之处.
六.小结
通过本次数据结构的课程设计,我学习了很读哦之前上课没懂的知识.并在胡老师指导下,我对求哈夫曼树及哈夫曼编码/译码的算法有了更加深刻的了解,更巩固了课堂中学习有关于哈夫曼编码的知识,真正学会一种算法了.当求解一个算法时,不是拿到问题就不加思索地做,而是首先要先对它有个大概的了解,接着再详细地分析每一步怎么做,无论自己以前是否有处理过相似的问题,只要按照以上的步骤,必定会顺利地做出来.
这次课程设计是我们大三来做的第二次了,我在编辑中犯了不应有的错误,设计统计字符和合并时忘记应该怎样保存保存数据,在老师的指导下明确并改正了错误和疏漏,使我们的程序有了更高的质量.在上次的设计中已经积累了一些基本的经验,所以做起来相比上次算是顺利多了,但也还是会遇到一些这样或那样的问题,在这时就要看团体的力量,遇到困难时我们组会聚集到一块儿合力讨论,尽力把它解决,每次解决了一个问题之后就会给自己多了一份自信,对今后的学习和程序的设计有了更大的信心.再次我更要真心的感谢孙克雷老师对我们的帮助与指导.我会更加努力学习数据结构方面的知识,来完善自己的学习.
参考文献
[1] 刘晓华.SQL Server2000数据库应用开发.北京:电子工业出版社,2001.6
[2] (美)微软公司着,王黎,袁永康译.Microsoft.NET 战略.北京:清华大学出版社,2002.1
[4] 谭浩强.C程序设计第二版.北京:清华大学出版社,2003
[5]任哲等.MFC Windows程序设计.北京:清华大学出版社,2004
[6]唐克.MFC程序设计.北京:北京希望电子出版社,2002
[7]严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版社,1997
[8]求是科技.Visual C++ 6.0信息管理系统开发.北京:人民邮电出版社,2005
[9]朱晴婷,黄海鹰,陈莲君.VC++程序设计.北京:清华大学出版社,1998
数据结构——哈夫曼编码/译码器
13
总结:本论文主要论述了等于数据结构论文范文相关的参考文献,对您的论文写作有参考作用。
结构体等于结构体引用文献:
[1] 砌体结构方向论文选题 砌体结构论文题目哪个好
[2] 砌体结构期刊文章参考文献 砌体结构参考文献有哪些
[3] 砌体结构论文提纲格式范文 砌体结构论文框架怎样写