1、1,数据结构与算法 Data Structure Algorithms烟台南山学院信息科技学院 数据结构与算法教学组,2,数据结构是计算机及其相关专业的重要课程 计算机发展初期:处理数值计算问题不重视数据结构 20世纪6080年代:非数值处理问题沃思:算法 + 数据结构 = 程序 20世纪80年代至今:面向对象(OO)技术出现数据结构与面向对象具有天然的对应,3,前言计算机系列课程之间的联系,4,数据结构课程的地位,是介于数学、计算机硬件和计算机软件三者之间的一门核心课程,关系,对象 关系 操作,5,第1章 绪论,1.1 数据结构基本概念 1.2 抽象数据类型概念 1.3 算法效率的度量,作业
2、,6,1.1 数据结构基本概念,Q1 什么是数据结构? Q2 学习数据结构有什么用? Q3 数据结构涵盖的主要内容?,讨论:,7,Q1:什么是数据结构?,答: (见教材P5) 是相互之间存在一种或多种特定关系的数据元素的集合,表示为:,(数值或非数值),Data_Structure=(D, S),或:是指同一数据元素类中各元素之间存在的关系。,亦可表示为:S(D, R) 或 B=(K, R),元素有限集,关系有限集,8,专业术语:数据、数据元素和数据项,(见教材P4定义): 数据(data)所有能被计算机识别、存储和处理的符号的集合(包括数字、字符、声音、图像等信息 )。 信息的载体 分为两类
3、:数值型数据、非数值型数据 数据元素(data element)是数据的基本单位,具有完整确定的实际意义(又称元素、结点,顶点、记录等)。 数据项(Data item)构成数据元素的项目。是具有独立含义的最小标识单位(又称字段、域、属性 等)。,三者之间的关系:数据 数据元素 数据项,例:班级通讯录 个人记录 姓名、年龄,9,struct Student int No;char name10;float score;int age;char sex; stu10= 1,“张三“,90,19,M, 2,“张莉“,95,18,F;,分析上述代码,哪些是:数据、数据元素、数据项、数据类型?,10,Q
4、2:学习数据结构有什么用?,答:计算机内的数值运算依靠方程式,而非数值运算(如表、树、图等)则要依靠数据结构。这是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等等的学科。,程序设计实质好算法好结构,同样的数据对象,用不同的数据结构来表示,运算效率可能有明显的差异。,11,Q3:数据结构涵盖的内容?,12,解释1: 什么叫数据的逻辑结构?,答:指数据元素之间的逻辑关系。即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。逻辑结构可细分为4类:,集合结构: 仅同属一个集合线性结构: 一对一(1:1) 树 结 构: 一对多(1:n)图 结 构: 多对多 (m:
5、n),非线性,线 性,13,例:用图形表示下列数据结构,并指出它 们是属于线性结构还是非线性结构。,(1) S=(D, R)D= a, b, c, d, e, f R=(a,e), (b,c), (c,a), (e,f), (f,d),解: 上述表达式可用图形表示为:,b c a e f d,此结构为线性的。,14,例,一个学生管理程序所要处理的数据可能是一张表格。除了第一条和最后一条以外,每条记录都只有唯一的前驱和后继元素。,元素之间是1:1关系,都只有唯一的前驱和唯一的后继,15,(2) S=(D, R) D=di | 1i5 R=(di , dj ), ij,d1d5 d2d4 d3,该
6、结构是非线性的。,解:上述表达式可用图形表示为:,16,田径运动会的时间安排问题,七个项目: 分别为100米、200米、跳高、跳远、铅球、铁饼和标枪。 六名选手 每个选手最多参加3个项目。,如何设计合理的比赛日程?,17,18,解释2:什么叫数据的物理结构?,答:物理结构亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。它依赖于计算机。,存储结构可分为4大类:,例:(见教材P6)复数3.02.3i 的两种存储方式:,顺序、链式、索引、散列,法1:地址 内容,法2:地址 内容,2字节,19,解释3:什么是数据的运算?,答:在数据的逻辑结构上定义的操作算法。 它在数据的存储结构上实现
7、。,最常用的数据运算有5种:,插入、删除、修改、查找、排序,20,1.2 抽象数据类型概念,Q1 数据类型与抽象数据类型的区别? Q2 抽象数据类型如何定义? Q3 抽象数据类型如何表示和实现?,讨论:,提示:教材中例1-6和例1-7分别给出了抽象数据类型“三元组”的定义、表示和实现,请试阅读。,21,Q1 数据类型与抽象数据类型的区别?,数据类型:是一个值的集合和定义在该值上的一组操作的总称。,抽象数据类型:由用户定义,用以表示应用问题的数据模型。它由基本的数据类型构成,并包括一组相关的服务(或称操作),它与数据类型实质上是一个概念,但其特征是使用与实现分离,实行封装和信息隐蔽(独立于计算机
8、)。,22,Q2 抽象数据类型如何定义?,抽象数据类型可以用以下的三元组来表示:ADT = (D,S,P)数据对象 D上的关系集 D上的操作集,ADT抽象数据类型名 数据对象:数据关系: 基本操作 : ADT抽象数据类型名,ADT常用定义格式,23,例:给出自然数(Natural Number )的抽象数据类型定义。,ADT Natural_Number is objects: 一个整数的有序子集合,它开始于0,结束于机器能表示的最大整数 (MAX INT) functions: 对于所有的 x, y Natural_Number; TRUE, FALSE Boolean; +, -, , =
9、 = ,=等都是可用的服务。 Zero ( ): Natural Number 返回 0 IsZero(x): Boolean if (x=0) 返回TRUE else 返回 FALSE Add(x, y): Natural Number if (x+y = MAX INT)返回 x+yelse 返回MAX INT Subtract(x,y): Natural Number if (xy)返回0 else 返回x-y Equal(x,y): Boolean if (x= y)返回TRUE else 返回FALSE Successor(x) : Natural Number if (x = MA
10、X INT)返回x else 返回x+1 end Natural_Number,24,Q3 抽象数据类型如何表示和实现?,抽象数据类型可以通过固有的数据类型(如整型、实型、字符型等)来表示和实现。,注1 :它有些类似C语言中的结构(struct)类型,但增加了相关的服务。 注2 :教材中用的是类C语言(介于伪码和C语言之间)作为描述工具。其描述语法见P10-11。,但上机时要用具体语言实现,如C或C+等,25,1.3 算法效率的度量,Q1. 什么是算法?如何评判一个算法的好坏? Q2. 时间复杂度和空间复杂度如何表示? Q3. 计算举例,讨论:,26,程序设计实质好算法好结构,答:算法是解决某
11、一特定类型问题的有限运算序列。是一系列输入转换为输出的计算步骤。,常用时间复杂度来衡量,1. 什么是算法?如何评判一个算法的好坏?,算法有5个基本特性:,算法评价有4个指标:,有穷性、确定性、可行性、输入和输出,运行时间、占用空间、正确性和简单性,常用空间复杂度来衡量,27,时间复杂度T(n)按数量级递增顺序为:,注1 O()为渐近符号。 注2 空间复杂度S(n)按数量级递增顺序也与上表类同。,复杂度高,复杂度低,28,渐进符号(O)的定义:当且仅当存在一个正的常数 C,使得对所有的 n n0 ,有 f(n) Cg(n),则 f(n) = O(g(n),3n+2=O(n) /* 3n+24n
12、for n2 */ 3n+3=O(n) /* 3n+34n for n3 */ 100n+6=O(n) /* 100n+6101n for n10 */ 10n2+4n+2=O(n2) /* 10n2+4n+211n2 for n5 */ 6*2n+n2=O(2n) /* 6*2n+n2 7*2n for n4 */,例:,29,例:分析以下程序段的时间复杂度。,i=1; while(i=n)i=i*2; ,该算法的运行时间由程序中所有语句的频度(即该语句重复执行的次数)之和构成。,解:,分析:显然,语句的频度是1。设语句2的频度是f(n),则有:,即f(n)log2n,取最大值f(n)=log2n,所以该程序段的时间复杂度T(n)=1+f(n)=1+ log2n= O( log2n),算法的时间复杂度是由嵌套最深层语句的频度决定的。,