- 1、本文档共87页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构和算法分析第一章绪论
*;*;*;*;*;一、为什么要学习数据结构?
1、什么是程序、软件?
N.沃思(Niklaus Wirth)教授提出:
程序=算法+数据结构;*;;2、电子计算机的主要用途:
?早期:
主要用于数值计算。
?后来:
处理逐渐扩大到非数值计算领域(能处理多种复杂的具有一定结构关系的数据)。;(1)数值计算解决问题的一般步骤:
数学模型→选择计算机语言→编出程序→测试→最终解答。
数值计算的关键是:如何得出数学模型(方程)?
程序设计人员比较关注程序设计的技巧。;(2)非数值计算问题:
数据元素之间的相互关系一般无法用数学方程加以描述;*;*;*;例4: 电话号码查询问题:
(1)按顺序存储方式:须遍历表
(2)按姓氏索引方式:索引
要写出好的查找算法,取决于这张表的结构及存储方式。
电话号码表的结构和存储方式决定了查找(算法)的效率。
;例5: ???径赛的时间安排问题(无向图的着色问题) :
设有六个比赛项目,规定每个选手至多可参加三个项目,有五人报名参加比赛(如下表所示)设计比赛日程表,使得在尽可能短的时间内完成比赛。;例6:田径赛的时间安排问题;(1)设用如下六个不同的代号代表不同的项目:
跳高 跳远 标枪 铅球 100米 200米
A B C D E F
(2)用顶点代表比赛项目
不能同时进行比赛的项目之间连上一条边。
(3)某选手比赛的项目必定有边相连(不能同时比赛)。
;姓名;总结:
求解非数值计算的问题主要考虑的是设计出合适的数据结构及相应的算法。
即:首先要考虑对相关的各种信息如何表示、组织和存储?
因此,可以认为:数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作的学科。;二、数据结构课程的形成和发展:
形成阶段:
60年代初期,“数据结构”有关的内容散见于操作系统、编译原理和表处理语言等课程。1968年,“数据结构”被列入美国一些大学计算机科学系的教学计划。
发展阶段:
数据结构的概念不断扩充,包括了网络、集合代数论、关系等“离散数学结构”的内容。
70年代后期,我国高校陆续开设该课程。;《数据结构课程》所处的地位:
;*;*;*;*;*;*;*;*;2、数据结构的定义
定义1----
数据元素之间的相互关系称为结构,带有结构的数据元素的集合称为数据结构。
定义2----
按某种逻辑关系组织起来的一批数据(或称带结构的数据元素的集合)应用计算机语言并按一定的存储表示 方式把它们存储在计算机的存储器中,并在其上定义了一个运算的集合。;*;3、数据结构的三个方面的含义:
逻辑结构---
数据元素间抽象化的相互关系(简称为数据结构)。
与数据的存储无关,独立于计算机,它是从具体问题抽象出来的数学模型。
存储结构(物理结构)----
数据元素及其关系在计算机存储器中的存储方式。
是逻辑结构用计算机语言的实现,它依赖于计算机语言。
运算(算法);(1)逻辑结构---
线性结构----
有且仅有一个开始和一个终端结点,并且所有结点都最多只有一个直接前趋和一个后继。
例如:线性表、栈、队列、串
非线性结构----
一个结点可能有多个直接前趋和直接后继。
例如:树、图、多维数组、广义表等。
;(2)存储结构
存储结构两方面的内容:
数据元素自身值的表示(数据域)
该结点与其它结点关系的域(链域)
四种基本的存储方法:
顺序存储方法(结构)
链接存储方法(链式存储结构)
索引存储方法
散列存储方法
同一种逻辑结构可采用不同的存储方法(以上四种之一或组合),这主要考虑的是运算方便及算法的时空要求。;逻辑结构存储结构小结:
(1)数据的逻辑结构、存储结构和数据的运算(算法)构成了数据结构三个方面的含义。
(2)程序设计的实质是对实际问题选择一个好的数据结构,加之设计一个好的算法。而好的算法在很大程度上取决于描述实际问题的数据结构。;*;*;*;*;*;*;算法的概念和描述:
一、算法的概念:
所谓算法(Algorithm)是描述计算机解决给定问题的操作过程(解题方法),即为解决某一特定问题而由若干条指令组成的有穷序列。
;1.算法----求解一个特定任务的指令的有限序列。
例7.求a[0]..a[n-1]中n个数的平均值(假定n0)。
float average(float a[ ],int n)
{ int i;float s=0.0; //累加器赋初值
for (i=0;in;i++)
文档评论(0)