《数据结构》讲义.doc

上传人:ng****60 文档编号:2114356 上传时间:2019-04-29 格式:DOC 页数:96 大小:7.95MB
下载 相关 举报
《数据结构》讲义.doc_第1页
第1页 / 共96页
《数据结构》讲义.doc_第2页
第2页 / 共96页
《数据结构》讲义.doc_第3页
第3页 / 共96页
《数据结构》讲义.doc_第4页
第4页 / 共96页
《数据结构》讲义.doc_第5页
第5页 / 共96页
点击查看更多>>
资源描述

1、1第 一 章 : 绪 论课程:数据结构课题:第一章 1.11.4 小节(共 4 个课时)1.1 什么是数据结构1.2 基本概念和术语1.3 抽象数据类型的表现与实现1.4 算法和算法分析目的要求:理解数据、数据元素、数据项的概念;掌握逻辑结构和存储结构的关系;理解算法的基本概念;学会分析算法的时间复杂性和空间复杂性。新课重点、难点:数据、数据元素、数据项、时间复杂性和空间复杂性教学方法:课堂讲解、例题演示,课件演示教学内容及过程:第 1-2 课时计算机的应用不再局限于科学计算,更多地用于控制,管理,数据处理等非数值计算的处理工作。计算机加工处理的对象:数值,字符,表格,图形声音,图象等具有一定

2、结构的数据。进行程序设计时必须分析待处理的对象的特性及各对象之间存在的关系产生背景。1.1 什么是数据结构 计算机解题步骤:建立数学模型设计解此数学模型的算法编制程序进行测试调整解答。其中建立数学模型的实质:找出操作对象之间的关系。例 1. 图书馆书目检索 对应线性关系例 2. 博奕树 对应树型关系例 3. 交叉路口交通灯管理 对应图状结构。 数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象及它们之间的关系和操作等的学科。(地位) 1.2 数据结构的基本概念和术语 1. 数据(Data)数据是描述客观事物的数值、字符以及能输入机器且能被处理的各种符号集合。换句话说,数据是对客观事物

3、采用计算机能够识别、存储和处理的形式所进行的描述;是计算机加工处理的对象。包括数值、字符、声音、图象等。 2. 数据元素(Data Element)数据元素是组成数据的基本单位, 是数据集合的个体,在计算机中通常作为一个逻辑整体进行考虑和处理。一个数据元素可由若干个数据项组成(Data Item) 。 3. 数据对象(Data Object)数据对象是性质相同的数据元素的集合,是数据的一个子集。例如:整数数据对象是集合 N=0, 1, 2, ,字母字符数据对象是集合 C=A,B,Z,表 1-1 所示的学籍表也可看作一个数据对象。由此可看出,不论数据元素集合是无限集(如整数集) 、有限集(如字符

4、集) ,还是由多个数据项组成的复合数据元素(如学籍表) ,只要性质相同, 都是同一个数据对象。 综上 13 所述,再分析数据概念: 24. 结构(Data Structure)数据元素相互之间的关系称为结构( Structure ) ,有四种基本结构。(1) 集合结构:结构中的数据元素之间除了同属于一个集合的关系外,无任何其它关系。 (2) 线性结构:结构中的数据元素之间存在着一对一的线性关系。 (3) 树形结构:结构中的数据元素之间存在着一对多的层次关系。 (4) 图状结构或网状结构:结构中的数据元素之间存在着多对多的任意关系。 线性结构线性表、栈、队、字符串、数组、广义表非线性结构树、 图

5、 数据结构的形式定义:数据结构是一个二元组 Data_structure=(D,S) 。其中:D 为数据结构的有限集,S 是 D 上关系的有限集。例:复数结构 Complex=(C,R)其中:C 为含两个实数的集合c1,c2;R=P, P 是集合 C 上的一种关系, P=,为有序偶,c1 表示复数的实部,c2 表示复数的虚部。存储结构存储结构(又称物理结构)是逻辑结构在计算机中的存储映象,是逻辑结构在计算机中的实现,它包括数据元素的表示和关系的表示。 形式化描述:D 要存入机器中,建立一从 D 的数据元素到存储空间 M 单元的映象 S,DM, 即对于每一个d,dD, 都有唯一的 mM,使 S(

6、D)=m, 同时这个映象必须明显或隐含地体现关系 R。 逻辑结构与存储结构的关系为:存储结构是逻辑关系的映象与元素本身的映象。逻辑结构是数据结构的抽象,存储结构是数据结构的实现,两者综合起来建立了数据元素之间的结构关系。 顺序映象 (顺序存储结构)顺序结构用元素在存储器中的相对位置表示数据元素之间的逻辑关系。 非顺序映象(非顺序存储结构)非顺序映像借助指示元素存储地址的指针表示元素之间的逻辑关系。 一维数组来描述顺序存储结构,用指针来描述链式存储结构。 运算的集合 数据结构的内容可归纳为三个部分:逻辑结构、存储结构和运算集合。按某种逻辑关系组织起来的一批数据,按一定的映象方式把它存放在计算机的

7、存储器中,并在这些数据上定义了一个运算的集合, 就叫做数据结构。 3数据类型(Data Type)数据类型是一组性质相同的值集合以及定义在这个值集合上的一组操作的总称。数据类型中定义了两个集合,即该类型的取值范围,以及该类型中可允许使用的一组运算。例如高级语言中的数据类型就是已经实现的数据结构的实例。 从这个意义上讲,数据类型是高级语言中允许的变量种类, 是程序语言中已经实现的数据结构(即程序中允许出现的数据形式) 。在高级语言中,整型类型可能的取值范围是-32 768+32 767, 可用的运算符集合为加、 减、 乘、 除、 取模(如 C 语言中+, -, *, /, %) 。 抽象数据类型

8、 ) 数据的抽象计算机中使用的是二进制数,汇编语言中则可给出各种数据的十进制表示,如 98.65、 9.6E3 等, 它们是二进制数据的抽象; 使用者在编程时可以直接使用, 不必考虑实现细节。在高级语言中,则给出更高一级的数据抽象,出现了数据类型, 如整型、 实型、字符型等。到抽象数据类型出现,可以进一步定义更高级的数据抽象,如各种表、队、栈、树、图、窗口、管理器等,这种数据抽象的层次为设计者提供了更有利的手段,使得设计者可以从抽象的概念出发,从整体考虑,然后自顶向下、逐步展开,最后得到所需结果。可以这样看,高级语言中提供整型、实型、字符、记录、文件、指针等多种数据类型,可以利用这些类型构造出

9、像栈、队列、树、图等复杂的抽象数据类型。 ) 抽象数据类型 (Abstract Data Type)抽象数据类型(简称 ADT)是指基于一类逻辑关系的数据类型以及定义在这个类型之上的一组操作。抽象数据类型的定义取决于客观存在的一组逻辑特性,而与其在计算机内如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。从某种意义上讲,抽象数据类型和数据类型实质上是一个概念。整数类型就是一个简单的抽象数据类型实例。 “抽象”的意义在于教学特性的抽象。一个 ADT 定义了一个数据对象,数据对象中各元素间的结构关系,以及一组处理数据的操作。ADT 通常是指由用户定义且用以表示

10、应用问题的数据模型,通常由基本的数据类型组成,并包括一组相关服务操作。 抽象数据类型是近年来计算机科学中提出的最重要的概念之一,它集中体现了程序设计中一些最基本的原则:分解、抽象和信息隐藏。 一个抽象数据类型确定了一个模型,但将模型的实现细节隐藏起来;它定义了一组运算,但将运算的实现过程隐藏起来。 数学模型抽象数据类型数据结构,恰好反应了信息结构转换的三个重要阶段,而在这个转换过程中,数据结构是基础,抽象数据类型是中枢。 一个线性表的抽象数据类型的描述如下: ADT Linear-list数据元素 所有 ai 属于同一数据对象,i=1,2,n, n0;逻辑结构 所有数据元素 ai(i=1,2,

11、n-1)存在次序关系,ai 无前趋,an 无后继; 操作 设 L 为 Linear-list:Initial(L): 初始化空线性表;Length(L): 求线性表的表长;Get(L, i): 取线性表的第 i 个元素; Insert(L, i, b): 在线性表的第 i 个位置插入元素 b; Delete(L, i): 删除线性表的第 i 个元素。) 抽象数据类型实现 第一种情况: 传统的面向过程的程序设计。第二种情况: “包” 、 “模型”的设计方法。第三种情况: 面向对象的程序设计(Object Oriented Programming,简称 OOP) 。 ) ADT 的定义ADT 的定

12、义格式不唯一, 我们采用下述格式定义一个 ADT: ADT 抽象数据类型名数据对象: 数据关系: 4基本操作: ADT 抽象数据类型名 其中数据对象和结构关系的定义采用数学符号和自然语言描述, 而基本操作的定义格式为: 操作名称 (参数表)初始条件: 操作结果: 关于参数传递参数表中的参数有两种:第一种参数只为操作提供待处理数据, 又称值参;第二种参数既能为操作提供待处理数据, 又能返回操作结果,也称变量参数。操作前提描述了操作执行之前数据结构和参数应满足的条件, 操作结果描述操作执行之后, 数据结构的变化状况和应返回结果。ADT 可用现有计算机语言中已有的数据类型, 即固有数据类型来表示和实

13、现。不同语言的表示和实现方法不尽相同,如 ADT 中“返回结果的参数” , PASCAL语言用“变参” 实现, C+语言通过“引用型参数”实现, 而 C 语言用“指针参数”实现。 用标准 C 语言表示和实现 ADT 描述时,主要包括以下两个方面: (1) 通过结构体将 int、 float 等固有类型组合到一起, 构成一个结构类型, 再用 typedef 为该类型或该类型指针重新起一个名字。 (2) 用 C 语言函数实现各操作。 基本操作主要有以下几种: (1) 插入: 在数据结构中的指定位置上增添新的数据元素; (2) 删除: 删去数据结构中某个指定数据元素; (3) 更新:改变数据结构中某

14、个元素的值, 在概念上等价于删除和插入操作的组合; (4) 查找:在数据结构中寻找满足某个特定要求的数据元素(的位置和值); (5) 排序:(在线性结构中)重新安排数据元素之间的逻辑顺序关系,使数据元素按值由小到大或由大到小的次序排列。 结构化的开发方法与面向对象的开发方法的不同点,结构化的开发方法是面向过程的开发方法, 首先着眼于系统要实现的功能。从系统的输入和输出出发, 分析系统要实现的功能,用自顶向下、逐步细化的方式建立系统的功能结构和相应的程序模块结构。一旦程序功能需要修改, 就会涉及多个模块,修改量大,易于出错,并会引起程序的退化。 作业 1:1:理解和掌握几个重要的基本概念:数据结

15、构;抽象数据类型等;2:理解和运用四种逻辑结构;并进行合理的划分。第 3-4 课时13 抽象数据类型的表示和实现 (1) 预定义常量和类型。本书中用到以下常量符号,如 True、 False、MAXSIZE 等,约定用如下宏定义预先定义: define TRUE 1 define FALSE 0 define MAXSIZE 100 define OK 1 define ERROR 0 (2) 本书中所有的算法都以如下的函数形式加以表示, 其中的结构类型使用前面已有的定义。 数据类型 函数名(形式参数及说明 ) 内部数据说明; 执行语句组; /*函数名*/函数的定义主要由函数名和函数体组成,函

16、数体用花括号“”和“”括起来。 函数中用方括号括起来的5部分如“形式参数 ”为可选项, 函数名之后的圆括号不可省略。 (3) 赋值语句。1、简单赋值;(1) 变量名=表达式 ,它表示将表达式的值赋给左边的变量; (2) 变量+, 它表示变量加 1 后赋值给变量; (3) 变量-, 它表示变量减 1 后赋值给变量。2、串联赋值#;变量 1=变量 2=变量 3=变量 k=表达式 ; 3、成组赋值#;(变量 1 , 变量 2 , 变量 3 , , 变量 k)=(表达式 1 , 表达式 2 , 表达式 3 , , 表达式 k ) ; 数组名 1 下标 1 下标 2=数组名 2 下标 1 下标 2 ;

17、4、条件赋值;变量名=条件表达式?表达式 1: 表达式 2 ; (4) 条件选择语句。if (表达式 ) 语句; if (表达式 ) 语句 1; else 语句 2; (5) 循环语句。1、for 语句for (; ; )循环体语句; 首先计算表达式 1 的值, 然后求表达式 2 的值,若结果非零(即为真)则执行循环体语句,最后对表达式3 运算,如此循环, 直到表达式 2 的值为零(即不成立为假)时为止。 2、while 语句 while ()循环体语句;while 循环首先计算条件表达式的值,若条件表达式的值非零(即条件成立) ,则执行循环体语句,然后再次计算条件表达式的值, 重复执行,直到

18、条件表达式的值为零(即为假)时退出循环, 执行该循环之后的语句。 3、do-while 语句do 循环体语句while ()该循环语句首先执行循环体语句, 然后计算条件表达式的值, 若条件表达式成立,则再次执行循环体,再计算条件表达式的值,直到条件表达式的值为零,即条件不成立时结束循环。 (6) 输入、 输出语句。输入语句: 用函数 scanf 实现; 特别当数据为单个字符时, 用 getchar 函数实现;当数据为字符串时,用 gets 函数实现。 输出语句: 用 printf 函数实现;当要输出单个字符时,用 putchar 函数实现;当数据为字符串时,用puts 函数实现。 其中输入输出

19、函数中的类型部分不做严格要求, 淡化表述。 (7) 其它一些语句。 return 或 return: 用于函数结束。 break 语句: 可用在循环语句或 case 语句中结束循环过程或跳出情况语句。 continue 语句: 可用在循环语句中结束本次循环过程, 进入下一次循环过程。 exit语句: 表示出现异常情况时, 控制退出函数。 (8) 注释形式。/*字符串*/ 、/6注释句的作用是增强算法的可阅读性,在算法描述中要求在函数首部加上对算法功能的必要注释描述。加注释说明时如果没有涉及到的参量一定是多余的,而涉及到的内容应当作为参量,这实际上是程序设计中的一个素质要求, 希望多加注意。 (

20、9) 一些基本的函数, 例如:max 函数: 用于求一个或几个表达式中的最大值;min 函数: 用于求一个或几个表达式中的最小值;abs函数: 用于求表达式的绝对值;eof 函数: 用于判定文件是否结束; eoln 函数: 用于判断文本行是否结束。ADT 举例:对于一个复数 z=x+yi ADT complex数据对象 D=c1,c2|c1,c2R数据关系 R1基本操作:add(z1,z2,sum);subTracf(z1,z2,difference);Get_re (z) ;Get_im(z);ADT complex;1.4 算 法 1. 算法(Algorithm)的定义Algorithm

21、is a finite set of rules which gives a sequence of operation for solving a specific type of problem. (算法是规则的有限集合, 是为解决特定问题而规定的一系列操作。) 是指令的有限序列,其中每一条指令表示一个或多个操作。 2. 算法的特性 (1) 有穷性:有限步骤之内正常结束, 不能形成无穷循环。 (2) 确定性:算法中的每一个步骤必须有确定含义, 无二义性。 (3)可行性:原则上能精确进行, 操作可通过已实现的基本运算执行有限次而完成。(4)输入:有多个或 0 个输入。 (5)输出: 至少有一

22、个或多个输出。在算法的五大特性中, 最基本的是有限性、 确定性和可行性。 3. 算法设计的要求) 算法的正确性(1) 所设计的程序没有语法错误; (2) 所设计的程序对于几组输入数据能够得出满足要求的结果; (3) 所设计的程序对于精心选择的典型、 苛刻而带有刁难性的几组输入数据能够得到满足要求的结果。 (4) 程序对于一切合法的输入数据都能产生满足要求的结果。 例如: 要求 n 个数的最大值问题, 给出示意算法如下: max=0; for(i=1; imax) max=x; 2) 可读性 3) 健壮性 4) 高效率和低存储量 算法、 语言和程序的关系(1) 算法: 描述了数据对象的元素之间的

23、关系(包括数据逻辑关系、 存储关系描述) 。 (2) 描述算法的工具:算法可用自然语言、框图或高级程序设计语言进行描述。 自然语言简单但易于产生7二义,框图直观但不擅长表达数据的组织结构, 而高级程序语言则较为准确但又比较严谨。 (3) 程序是算法在计算机中的实现(与所用计算机及所用语言有关) 。 设计实现算法过程的步骤找出与求解有关的数据元素之间的关系(建立结构关系) 。确定在某一数据对象上所施加的运算。考虑数据元素的存储表示。选择描述算法的语言。设计实现求解的算法, 并用程序语言加以描述。 对算法作性能评价1. 性能评价对问题规模和该算法在运行时所占的空间 S 与所耗费的时间 T 给出一个

24、数量关系的评价。问题规模 N 对不同的问题其含义不同,对矩阵是阶数, 对多项式运算是多项式项数,对图是顶点个数,对集合运算是集合中的元素个数。 2. 有关数量关系的计算数量关系评价体现在时间算法编程后在机器中所耗费的时间。 数量关系评价体现在空间算法编程后在机器中所占的存储量。 1) 关于算法执行时间一个算法的执行时间大致上等于其所有语句执行时间的总和, 对于语句的执行时间是指该条语句的执行次数和执行一次所需时间的乘积。 2) 语句频度语句频度是指该语句在一个算法中重复执行的次数。 例 1-1 两个 nn 阶矩阵相乘。 3) 算法的时间复杂度原操作是指从算法中选取一种对所研究问题是基本运算的操

25、作, 用随着问题规模增加的函数来表征, 以此作为时间量度。 而对于算法分析,我们关心的是算法中语句总的执行次数 T(n)是关于问题规模 n 的函数,进而分析 T(n)随 n 的变化情况并确定 T(n)的数量级(Order of Magnitude) 。在这里, 我们用“O”来表示数量级,这样我们可以给出算法的时间复杂度概念。 所谓算法的时间复杂度, 即是算法的时间量度,记作: T(n)=O(f(n)它表示随问题规模 n 的增大,算法的执行时间的增长率和 f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。 一般情况下, 随 n 的增大, T(n)的增长较慢的算法为最优的算法。 例如

26、: 在下列三段程序段中,给出原操作 x=x+1 的时间复杂度分析。 (1) x=x+1 ; 其时间复杂度为 O(1), 我们称之为常量阶; (2) for (i=1; i。 由此可看出,线性表是一种最简单的数据结构,因为数据元素之间是由一前驱一后继的直观有序的关系确定;线性表又是一种最常见的数据结构,因为矩阵、数组、字符串、堆栈、 队列等都符合线性条件。 2.1.2 线性表的抽象数据类型定义ADT List数据元素: D=ai| aiElemSet, i=1, 2, ,n, n0 , ElemSet 为某一数据对象关系: | ai, ai+1D,i=1, 2, , n-1基本操作:(1) InitList( Lb_len= ListLength (Lb);For (i=1;i= Lb_len;i+)GetElem (Lb,i,e);If(!LocateElem(La,e,equal) ListInsert(La,+ La_len,e);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。