数据结构.docx
- 文档编号:24200093
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:48
- 大小:212.06KB
数据结构.docx
《数据结构.docx》由会员分享,可在线阅读,更多相关《数据结构.docx(48页珍藏版)》请在冰豆网上搜索。
数据结构
沈阳工程学院
课程设计
(数据结构)
设计题目:
电文的编码和译码
系别信息工程系班级软本101
学生姓名车佳兴张兴越于皓学号272319
指导教师吕海华、姜柳职称讲师、副教授
起止日期:
2011年12月12日起——至2011年12月23日止
沈阳工程学院
课程设计任务书
课程设计题目:
电文的编码和译码
系别信息工程系班级软本101
学生姓名车佳兴张兴越于皓学号272319
指导教师吕海华、姜柳职称讲师、副教授
课程设计进行地点:
实训F座
任务下达时间:
2011年12月07日
起止日期:
2011年12月12日起——至2011年12月23日止
教研室主任张欣2011年12月5日批准
一、课程设计的原始资料及依据
当今社会的一些领域,电文仍然被应用着,编写一个电文编码和译码系统还是有必要的,为适应该社会需求,我组特开发该系统。
该设计是对输入的一串电文字符实现哈夫曼编码,再对哈夫曼编码生成的代码串进行译码,输出电文字符串。
查阅有关程序设计的案例资料,进一步理解程序设计模块化的思想,并利用此思想,根据对程序设计学习编写一个电文的编码和译码系统。
通过本设计可以加深理解利用程序设计思想开发一个系统的整个流程,提高分析问题、解决问题和实际动手的能力。
二、课程设计主要内容及要求
1.构造哈夫曼树:
根据Huffman算法,若已知有n个叶子结点,则构造的哈夫曼树有2n-1个结点。
将结点初始化,然后输入n个结点的字符及权重。
利用循环构建出哈夫曼树。
2.编码:
从叶子结点出发走一条叶子到根的路径,将得到的代码序列反过来输出。
3.译码:
输入二进制代码串,将代码与编码表比较,确定相对应的字符。
三、对课程设计说明书撰写内容、格式、字数的要求
1.课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:
设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、设计小组评语、参考文献等。
一般不应少于3000字。
2.在适当位置配合相应的实验原理图、数据通路图、微程序流程图、实验接线图、微指令代码表等图表进行说明。
应做到文理通顺,内容正确完整,书写工整,装订整齐。
3.设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。
设计小组评语处注明设计组编号、设计组组长、设计组成员,并由设计组组长给出评语。
4.课程设计说明书手写或打印均可。
手写要用学校统一的课程设计用纸,用黑或蓝黑墨水工整书写;打印时采用A4纸,页边距均为20mm,正文采用宋体小四号字,行间距18磅。
文中大标题采用黑体小三号字,一级节标题采用黑体四号字,二级节标题采用黑体小四号字,表题与图题采用宋体五号字。
5.课程设计说明书装订顺序为:
封面、任务书、成绩评定表、目录、正文、参考文献。
四、设计完成后应提交成果的种类、数量、质量等方面的要求
1.完成“任务书”中指定的操作功能,运行稳定。
2.课程设计说明书。
五、时间进度安排
顺序
阶段日期
计划完成内容
备注
1
第1天
阅读资料
2
第2—3天
系统分析设计
3
第4—7天
程序编制、调试及运行
4
第8—9天
成绩评定
5
第10天
撰写课程设计说明书
六、主要参考资料(文献)
[1]郭翠英.C语言课程设计案例精编.北京:
中国水利水电出版社.2004.3
[2]严蔚敏.吴伟民数据结构(c语言版).北京:
清华大学出版社,2006
[3]张翔.C语言函数大全.北京:
清华大学出版社.2002.4
[4]浦滨.C游戏编程从入门到精通.北京:
北京希望电子出版社.2002.5
[5]陈天洲.C语言高级程序设计.北京:
人民邮电出版社.2002
[6]杨旭.C语言程序设计案例教程.北京:
人民邮电出版社.2005
[7]王为青.C语言高级编程及实例剖析.北京:
人民邮电出版社.2008.02
[8]徐慧.《C语言实例解析精粹》.北京:
人民邮电出版社.2006.04
[9]姚大鹏栾好利张翼英等编著.C语言程序设计教程习题与上机实训指导.中国水利水电出版社.2005
[10]王为青.C语言实例解析.北京:
人民邮电出版社.2008.02
沈阳工程学院
数据结构成绩评定表
系(部):
信息工程系班级:
软本101学生姓名:
车佳兴
指导教师评审意见
评价内容
具体要求
权重
评分
加权分
调研
论证
能独立查阅文献,收集资料;能制定课程设计方案和日程安排。
0.1
5
4
3
2
工作能力
态度
工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作,
0.2
5
4
3
2
工作量
按期圆满完成规定的设计任务,工作量饱满,难度适宜。
0.2
5
4
3
2
说明书的质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
0.5
5
4
3
2
指导教师评审成绩
(加权分合计乘以8)
分
加权分合计
指导教师签名:
年月日
评阅教师评审意见
评价内容
具体要求
权重
评分
加权分
查阅
文献
查阅文献有一定广泛性;有综合归纳资料的能力
0.2
5
4
3
2
工作量
工作量饱满,难度适中。
0.5
5
4
3
2
说明书的质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
0.3
5
4
3
2
评阅教师评审成绩
(加权分合计乘以4)
分
加权分合计
评阅教师签名:
年月日
答辩小组评审意见
评价内容
具体要求
权重
评分
加权分
学生汇报
汇报准备充分,思路清晰;语言表达准确,概念清楚,论点正确,有层次,有重点,基本上反映了所完成任务的全部内容;时间符合要求。
0.5
5
4
3
2
答辩
思路清晰;回答问题有理论依据,基本概念清楚;主要问题回答准确,深入,有说服力。
0.5
5
4
3
2
答辩小组评审成绩
(加权分合计乘以8)
分
加权分合计
答辩小组教师签名:
年月日
课程设计总评成绩
分
沈阳工程学院
数据结构成绩评定表
系(部):
信息工程系班级:
软本101学生姓名:
张兴越
指导教师评审意见
评价内容
具体要求
权重
评分
加权分
调研
论证
能独立查阅文献,收集资料;能制定课程设计方案和日程安排。
0.1
5
4
3
2
工作能力
态度
工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作,
0.2
5
4
3
2
工作量
按期圆满完成规定的设计任务,工作量饱满,难度适宜。
0.2
5
4
3
2
说明书的质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
0.5
5
4
3
2
指导教师评审成绩
(加权分合计乘以8)
分
加权分合计
指导教师签名:
年月日
评阅教师评审意见
评价内容
具体要求
权重
评分
加权分
查阅
文献
查阅文献有一定广泛性;有综合归纳资料的能力
0.2
5
4
3
2
工作量
工作量饱满,难度适中。
0.5
5
4
3
2
说明书的质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
0.3
5
4
3
2
评阅教师评审成绩
(加权分合计乘以4)
分
加权分合计
评阅教师签名:
年月日
答辩小组评审意见
评价内容
具体要求
权重
评分
加权分
学生汇报
汇报准备充分,思路清晰;语言表达准确,概念清楚,论点正确,有层次,有重点,基本上反映了所完成任务的全部内容;时间符合要求。
0.5
5
4
3
2
答辩
思路清晰;回答问题有理论依据,基本概念清楚;主要问题回答准确,深入,有说服力。
0.5
5
4
3
2
答辩小组评审成绩
(加权分合计乘以8)
分
加权分合计
答辩小组教师签名:
年月日
课程设计总评成绩
分
沈阳工程学院
数据结构成绩评定表
系(部):
信息工程系班级:
软本101学生姓名:
于皓
指导教师评审意见
评价内容
具体要求
权重
评分
加权分
调研
论证
能独立查阅文献,收集资料;能制定课程设计方案和日程安排。
0.1
5
4
3
2
工作能力
态度
工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作,
0.2
5
4
3
2
工作量
按期圆满完成规定的设计任务,工作量饱满,难度适宜。
0.2
5
4
3
2
说明书的质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
0.5
5
4
3
2
指导教师评审成绩
(加权分合计乘以8)
分
加权分合计
指导教师签名:
年月日
评阅教师评审意见
评价内容
具体要求
权重
评分
加权分
查阅
文献
查阅文献有一定广泛性;有综合归纳资料的能力
0.2
5
4
3
2
工作量
工作量饱满,难度适中。
0.5
5
4
3
2
说明书的质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
0.3
5
4
3
2
评阅教师评审成绩
(加权分合计乘以4)
分
加权分合计
评阅教师签名:
年月日
答辩小组评审意见
评价内容
具体要求
权重
评分
加权分
学生汇报
汇报准备充分,思路清晰;语言表达准确,概念清楚,论点正确,有层次,有重点,基本上反映了所完成任务的全部内容;时间符合要求。
0.5
5
4
3
2
答辩
思路清晰;回答问题有理论依据,基本概念清楚;主要问题回答准确,深入,有说服力。
0.5
5
4
3
2
答辩小组评审成绩
(加权分合计乘以8)
分
加权分合计
答辩小组教师签名:
年月日
课程设计总评成绩
分
摘要
数据结构课程是教学目标是要求学生会分析数据对象特征,掌握数据结构组织方法和计算方法,一边为应用涉及的数据选择适当的逻辑结构,存储结构以及相应的算法,初步掌握算法时间空间分析的技巧,培养良好的程序设计技能。
现代科学技术的飞速发展,改变了世界,也改变了人类的生活。
作为新世纪的大学生,应当站在时代发展的前列,掌握现代科学技术知识,调整自己的知识结构和能力结构,以适应社会发展的要求。
新世纪需要具有丰富的现代科学知识,能够独立解决面临的任务,充满活力,又有创新意识的新型人才。
随着各个领域的突飞猛进,计算机也有它卓越的进步。
数据结构不仅为计算机专业工作者所使用,而且为广大计算机应用人员所喜爱和使用。
数据结构是国际上广泛流行的计算机高级语言。
它适合作为系统描述语言,既可以用来编写系统软件,也可以用来编写应用软件。
许多高等学校,不仅在计算机专业开设数据结构课程,而且在非计算机专业也开设了数据结构课程。
学习数据结构已经成为广大计算机应用人员和广大青年学生的迫切要求。
在电报通信中,电文是以二进制代码传送的。
在发送时,需要将电文中的字符转换成二进制代码串,即编码;在接收时,要将收到的二进制代码串转化为对应的字符序列,即译码。
我们知道,字符被使用的频率是非均匀的。
在传送电文是,要想使电文总长尽可能短,就需要让使用频率高的字符编码长度尽可能短因此,若对某字符集进行不等长编码的设计,则要求任意一个字符的编码多不是其他字符编码的前缀,这种编码叫前缀编码。
运用了哈夫曼树的建立和哈夫曼编码等知识来完成预期的要求。
使人们在使用电报通信时变得更加方便和快捷。
在为期两周的数据结构课程设计学习中,先要学习数据结构课程的目的掌握数据结构存储的方法,学习会用计算机语言编写程序,以实现所需要处理的任务。
要正确处理算法与语法的关系,算法结构存储是程序的核心、是灵魂,语法是外壳、是工具。
不应把学习重点放在语法规则上,语法是重要的,不掌握语法规则就无法编写出正确的程序。
一定要把重点放在解题的思路上和运用何种存储的方法,通过思考和大量的阅读,来构造一个完整的程序。
数据结构存储的设计直接关系到程序的好坏。
关键词数组,哈夫曼树,编码,译码
目录
摘要I
第一章问题分析1
1.1引言1
1.2背景1
1.3分析2
1.3.1数组2
1.3.2哈夫曼树3
1.3.3电文的编码译码5
第二章原理与运行环境6
2.1数据结构理论6
2.1.1电文的编码译码数据结构理论6
2.2运行环境7
2.2.1简介7
第三章系统分析与设计9
3.1电文的编码译码的系统分析与设计9
3.1.1系统的功能9
3.1.2系统模块分析及流程图9
第四章系统功能实现14
4.1电文的编码译码系统功能实现14
4.1.1定义主函数14
4.1.2定义存储结构15
4.1.3构造哈弗曼树15
4.1.4电文的编码17
4.1.5电文的译码19
总结21
致谢22
参考资料(文献)23
第一章问题分析
1.1引言
数据结构作为一门学科主要研究数据的各种逻辑结构和存储结构,以及对数据的各种操作。
因此,主要有三个方面的内容:
数据的逻辑结构;数据的物理存储结构;对数据的操作(或算法)。
通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。
数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。
在当今信息时代,信息技术己成为当代知识经济的核心技术。
我们时刻都在和数据打交道。
比如人们在外出工作时找最短路径,在银行查询存款、通过互联网查新闻、以及远程教育报名等,所有这些都在与数据发生关系。
实际上,现实世界中的实体经过抽象以后,就可以成为计算机上所处理的数据。
数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。
数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。
学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。
通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。
通过此次课程设计主要达到以下目的:
♦了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
♦初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
♦提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
1.2背景
在当今信息爆炸时代,如何采用有效的数据压缩技术,来节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视。
哈夫曼编码正是一种应用广泛且非常有效的数据压缩技术。
哈夫曼编码的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。
树中从根到每个叶子都有一条路径,对路径上的各分支约定指向左子树的分支表示"0"码,指向右子树的分支表示"1"码,取每条路径上的"0"或"1"的序列作为和各个叶子对应的字符的编码,这就是哈夫曼编码。
通常我们把数据压缩的过程称为编码,反之,解压宿的过程称为解码。
电报通信是传递文字的二进制码组成的字符串。
例如,字符串"ABCDBACA"有四种字符,只需要2位二进制码表示即可:
A、B、C、B分别为00,01,10,11,那么上述串编码为:
0001101101001000,
总长为16位。
译码时两位一分即可。
但在信息传递时,总希望总长能尽可能的短,即采用最短码。
如果对每个字符设计长度不等的编码,且要让电文中出现次数较多的字符用尽可能短的编码,那么传送电文的总长便可减短。
比如,设计字母A、B、C和D的编码分别为:
0、1、00和01,则上述8个字符的电文可转换成总长为11的字符串"01000110001"。
这样编码总长虽然短了,但是这样的电文无法译码。
例如编码串的前4位"0100"既可以译成"ABAA",也可以译成"ABC",还可以译为"CD"等。
因此,若设计一种长短不等的编码,则必须是任一字符的编码都不是另一个字符编码的前缀,这中编码称为前缀编码。
可以利用二叉树来设计二进制的前缀编码:
如图6.22所示的二叉树:
左分支表示字符'0',右分支表示字符'1',则可以根结点到叶结点的路径上分支字符组成的串作为该叶结点的字符编码。
因此可得到字符A、B、C、D的二进制前缀编码分别:
0、10、110、111。
假设每种字符在电文中出现的次数为Wi,编码长度为Li,电文中有n种字符,则电文编码总长为∑WiLi。
若将此对应到二叉树上,Wi为叶结点的权,Li为根结点到叶结点的路径长度。
那么,∑WiLi恰好为二叉树上带权路径长度。
因此,设计电文总长最短的二进制前缀编码,就是以n种字符出现的频率作权,构造一棵哈夫曼树,此构造过程称为哈夫曼编码。
1.3分析
1.3.1数组
数组提供了一种快速,方便地管理一组相关数据的方法,是程序设计中的重要内容。
通过数组可以对大量性质相同的数据进行存储,排序,插入及删除等操作,从而可以有效地提高程序开发效率及改善程序的编写方式。
数组是一组数据的集合,将数据按照一定规则组织起来,形成一个可操作的整体,是对大量数据进行有效组织和管理的手段之一,通过数组函数可以对大量性质相同的数据进行存储,排序,插入及删除等操作,从而可以有效地提高程序开发效率及改善程序的编写方式。
数组类型
数组的本质是储存,管理和操作一组变量。
数组分为一维数组,二维数组和多维数组,但无论是一维还是多维,可以统一将数组分为数字索引数组和关联数组两种,数字索引数组使用数字作为键名,关联数组使用字符串作为键名。
数字索引数组,下标(键名)由数字组成,默认从0开始,每个数字对应数组元素在数组中的位置,不需要特别指定,会自动为数字索引数组键名赋一个整数值,然后从这个值开始自动增量,也可以指定从哪个位置开始。
关联数组,下标(键名)由数值和字符串混合的形式组成的数组。
数组需要用键名来访问存储在数组中的值。
声明数组
注意:
1.以数组名开始,第一个字符是字母或下划线,其后是任意数量的字母,数字或下划线。
2.在同一程序中,标量变量和数组变量都不能重名。
3.数组的名称区分大小写
声明数组的方法有两种,分别是用户声明和函数声明。
1.用户声明
array['0']="php数组";
2. array['1']="php学习";
函数声明
arrr=array('one'='php','two'='java');
创建二维数组,以上创建的都是只有一列数据内容,因此称为一维数组,如果将两个一维数组组合成一个数组那么就是二维数组。
例:
str=array("网络"=>array("ip地址","网关");
"图书"=>array("春秋","战国");
)
4,遍历数组
遍历数组就是按照一定的顺序依次访问数组中的每个元素,直到访问完为止。
在php中可以通过流程语句(foreach和for循环语句)和函数(list()和each())来遍历数组。
foreach(),
for来遍历数组要用count()函数来获取数量。
如果要遍历的数组是数字索引数组,并且数组的索引值为连续的整数时,可以使用for循环来遍历,但是前提条件是需要应用count()函数获取到数组中元素的数量,然后将获取的元素数量作为for循环的执行条件,才能完成数组的循环。
例如:
for($i=0;$i
通过数组函数list和each遍历数组:
list()函数将数组中的值赋给一些变量,该函数仅能用于数字索引的数组,且数字索引从0开始,语法:
voidlist(mixed...)参数mixed为被赋值的变量名称
each()函数返回数组中的键名和对应的值,并向前移动数组的指针,语法:
arrayeach(arrayarray)参数array为输入的数组。
例:
使用list函数获取each函数中返回数组的值,并分别赋给name和value,然后使用while循环输出
while(list(name,value)=each(array)){echoname=value}
5.输出数组元素
printf()函数可以输出数组的结构,也可以使用var_dump()函数输出数组结构。
echo语句则单纯输出数组中的某个元素,且要有标识符和数组索引配合,格式echoarray[0],同样print语句也可以输出数组中的某个元素。
1.3.2哈夫曼树
哈夫曼树
1、(哈夫曼(Huffman)树又称最优二叉树或最优搜索树,是一类带权路径长度最短的树。
)
什么是哈夫曼树?
为了说明清楚,我们先举一个具体的实例。
例:
将学生的百分制成绩表转换为五分制成绩,大于或等于90分者表为"A",80~90分为"B",70~79分为"C",60~69为"D",小于60分为"E"。
转换过程的程序用分支结构是很容易实现的。
如果每次的输入量很大,则应考虑程序的操作时间。
在实际问题中,学生的成绩在这五个等级上的分布是不均匀的,现假设其分布规律如下表所示。
表1.1
分数
90到100
80到89
70到79
60到69
0到59
分布情况
10%
30%
40%
15%
5%
学生的成绩数据共10000个,
判定过程如下图所示(一种分支结构)
图1.1
如按此过程判断,则5%的数据需1次比较,15%的数据需2次比较,40%的数据需3次比较,40%的数据需4次比较,因此10000个数据比较的次数为10000(5%+2×15%+3×40%+4×40%)=31500次
也即按如上图所示的分支结构
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构