1、上课前需要说明的几个问题: 任课教师:王岁花 联系电话:13663901273 2. 交流信箱: 3. 公共信箱: 密码: datasggxx 4.关于数据结构课程:教材、重要性、时间按排(54+32)、考试(=期末考试*70%+平时成绩*30%) 5.平时成绩主要是实验作业完成情况,实验每次点名,随机抽查验收,查看程序运行。,1.1 什么是数据结构,1.2 基本概念和术语,1.4 算法和算法分析,1.3 抽象数据类型,本章小结、教材、参考文献,作 业,1.1 什么是数据结构,1) 数据结构讨论的范畴。,Niklaus Wirth:程序=数据结构+算法,程序设计:算法: 数据结构:,为计算机
2、处理问题编制一组指令集,处理问题的策略,问题的数学模型,用计算机解决一个具体问题时,大致需要经过下列几个步骤: (1)抽象出一个适当的数学模型 (2)设计一个解此问题的算法 (3)编出程序进行测试、修改直至得到最终结果。,例1. 田径赛的时间安排问题设有六个比赛项目,规定每个选手至多可参加三个项目,有五人报名参加比赛(如下表所示)设计比赛日程表,使得在尽可能短的时间内完成比赛。,用无向图的着色问题解决!,(1)设用如下六个不同的代号代表不同的项目: 跳高 跳远 标枪 铅球 100米 200米A B C D E F (2)用顶点代表比赛项目 (3)用边连接不能同时进行比赛的项目则可用如下图所示:
3、,韦尔奇.鲍威尔(Welch Powell)方法:1.将图G中的结点按度递减的顺序排列。2.用没有用过的颜色对第一个点着色,并且按排列次序,对与前面着色点不相邻的点着相同颜色。3.从序列中删除第2步着过色的点。4.重复第2、3步,直到序列为空。,例:对上例,执行算法第1步结果为: F ,A , E ,B , C ,D 重复执行第2,3步序列变化为: A,E,B,C,D E,B,D B 图的变化为:,数据结构是一门讨论“描述现实世界实体的数学模型(非数值计算)及其上的操作在计算机中如何表示和实现”的学科。,2) 数据结构对研究对象及其之间关系的描述。,结构,数据结构的形式定义为:,数据结构是一个
4、二元组,Data_Structures = (D, S),其中:D :是数据元素的有限集S :是 D上关系的有限集。,(逻辑结构),1.2 基本概念和术语 数据(Data):是对信息的一种符号表示。在计算机科学中是指所有能被输入到计算机中并被计算机程序处理的符号的总称。 数据元素(Data Element):是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 数据项(Data Item):一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。 数据对象(Data Object):是性质相同的数据元素的集合。是数据的一个子集。,数据结构:是相互之间存在一种或多种特定关
5、系的数据元素的集合。,根据数据元素间关系的不同,数据结构或分为四种:,线性结构:结构中的数据元素之间 存在一对一的关系。,树型结构(层次结构):结构中的数据元素之间存在一对多的关系。,图状结构(网状结构):结构中的数据元素之间存在多对多的关系。,集 合:结构中的数据元素除了 同属于一个集合外,别无其它关系。,Data_Structures = (D, S),(逻辑结构),数据的存储结构, 逻辑结构在存储器中的映象,“数据元素”的映象 ?,“关系”的映象 ?,数据元素的映象方法:,用二进制位(bit)的位串表示数据元素,(321)10 = (501)8 = (101000001)2,A = (1
6、01)8 = (001000001)2,1.顺序映象 :借助于元素在计算机存储器中的存储位置来描述元素之间的逻辑关系。 例:关系的映象方法(表示 的方法),2.链式映象 借助于指示元素存储地址的指针表示元素之间的逻辑关系 。,在不同的编程环境中,,存储结构可有不同的描述方法。,当用高级程序设计语言进行编程时,通常可用高级编程语言中提供的数据类型描述之。,数据类型:数据类型是一个值的集合和定义在这组值 集上的一组操作的总称。 例如:C-语言中的int , float , char等,抽象数据类型(Abstract Data Type 简称ADT) :是指一个数学模型以及定义在此数学模型上的一组操
7、作。,抽象数据类型的描述方法:抽象数据类型可用(D,S,P)三元组表示,其中,D是数据对象,S是D上的关系集,P是对D的基本操作集。,本门课采用下面格式表示抽象数据类型: ADT 抽象数据类型名 数据对象:数据对象的定义 数据关系:数据关系的定义 基本操作:基本操作的定义 ADT 抽象数据类型名,其中,数据对象和数据关系的定义用伪码描述,基本操作的定义格式为: 基本操作名(参数表) 初始条件:初始条件描述 操作结果:操作结果描述 基本操作有两种参数:赋值参数只为操作提供输入值;引用参数以&打头, 除可提供输入值外,还将带回操作结果。,“初始条件”描述了操作执行之前数据结构和参数应满足的条件,若
8、不满足,则操作失败,并返回相应出错信息。若初始条件为空,则省略之。 “操作结果”说明了操作正常完成之后,数据结构的变化状况和应返回的结果。抽象数据类型需要通过固有数据类型(高级编程语言中已实现的数据类型)来实现。,void sum1(int a,int b,int c) c=a+b;return; ,void sum2(int a,int b,int ,void main( ) int x=3,y=4,z=5;printf(“x=%d,y=%d,z=%dn”,x,y,z);sum1(x,y,z);printf(“x=%d,y=%d,z=%dn”,x,y,z);sum2(x,y,z);print
9、f(“x=%d,y=%d,z=%dn”,x,y,z); ,运行结果 x=3,y=4,z=5 x=3,y=4,z=5 x=3,y=4,z=7,1.3 抽象数据类型的表示与实现本书采用类C-语言作为描述工具,类C-精选了C语言的一个核心子集,同时做了若干扩充修改,增强了语言的描述功能。P10-11,例如:抽象数据类型三元组的定义:P9,/ - 采用动态分配的顺序存储结构-typedef ElemType *Triplet;/ 由InitTriplet分配三个元素存储空间,/ Triplet类型是ElemType类型的指针 /存放ElemType类型的地址,/ bo1_1.cpp 抽象数据类型Tri
10、plet和ElemType /(由c1_1.h定义)的基本操作(8个) Status InitTriplet(Triplet ,Status Get(Triplet T,int i, ElemType ,Status IsAscending(Triplet T) / 初始条件:三元组T已存在。操作结果:如果/T的三个元素按升序排列,返回1,否则返回0return(T0=T1,Status Max(Triplet T,ElemType ,1.4 算法和算法分析 1) 什么是算法?算法(Algorithm)是对特定问题求解步骤的描述。描述算法的方法有:自然语言、流程图、N-S图和伪码语言等。本书采
11、用类C语言来描述算法。伪码语言是包括高级语言的三种基本结构、自然语言和数学语言成份的面向读者的一种语言。,2) 一个算法必须满足的五个准则: (1)有穷性-一个算法必须在执行有穷步骤之后正常结束,而不能形成无穷循环,且必须在有穷时间内完成。 例1.3、例1.4 (2)确定性(无二义)-算法的每一步操作都必须有确切含义,不得有任何二义性。,(3)可行性 :算法中的每一条指令必须是切实可执行的,即原则上可以通过已经实现的基本运算执行有限次来实现。 (4)输入:一个算法有n(n=0)个初始数据的输入。 (5)输出:一个算法有一个或多个与输入有某种关系的有效信息的输出。,例1.4 一个不超过100次计
12、数的算法n=1;s=0;while(n=100)s+=n; n+;输出n的值;,例1.3 一个不是算法的例子n=1;while(n0) n=n+1;输出n的值;,3)算法设计的要求正确性、可读性、健壮性和效率与存储量要求。,程序正确性的四个层面: (1)不含语法错误 (2)程序对于n组输入数据能够得出满足规格说明要求的结果。 (3)程序对于精心选择的典型、边界性的n组输入数据能得出满足规格说明要求的结果。 (4)程序对于一切合适的输入数据都能得出满足规格说明要求的结果(穷举)。,嫦娥一号:98.8万行源代码, 421万份文件, 打印 出来有23000页。用了160多万行程序证明它的正确 性。,
13、4)高效率与低存储量需求,通常,效率指的是算法执行时间;存储量指的是算法执行过程中所需的最大存储空间,两者都与问题的规模有关。,算法效率的衡量方法和准则,衡量算法效率的方法:,缺点:1必须执行程序2其它因素掩盖算法本质,事后统计法:,事前分析估算法,和算法执行时间相关的因素:,1算法选用的策略,2问题的规模,3编写程序的语言,4编译程序产生的机器代码的质量,5计算机执行指令的速度,一个特定算法的“运行工作量” 的大小,只依赖于问题的规模(通常用整数量n表示),或者说,它是问题规模的函数。,假如,随着问题规模 n 的增长,算法执行时间的增长率和 f(n) 的增长率相同,则可记作:,T (n) =
14、 O(f(n),称T (n) 为算法的(渐近)时间复杂度。,如何估算算法的时间复杂度?,( M 是0的常数),例:2n3+1000n2+1=O(n3)1000n2+n+1000000= O(n2),算法 = 控制结构 + 原操作 /基本操作(固有数据类型的操作),算法的执行时间 = 原操作(i)的执行次数原操作(i)的执行时间,算法的执行时间 与 原操作执行次数之和 成正比,从算法中选取一种对于所研究的问题来说是 基本操作 的原操作,以该基本操作 在算法中重复执行的次数 作为算法运行时间的衡量准则。,例 一两 个 矩 阵 相 乘,void mult(int a, int b, int c )
15、/ 以二维数组存储矩阵元素,c 为 a 和 b 的乘积for (i=1; i=n; +i)for (j=1; j=n; +j) cij = 0;for (k=1; k=n; +k)cij += aik*bkj; /for /mult,基本操作: 乘法操作,时间复杂度: O(n3),例 二选 择 排 序,时间复杂度: O(n2),基本操作: 比较(数据元素)操作,void select_sort(int a, int n) / 将 a 中整数序列重新排列成自小至大有序的整数序列。 / select_sort,/ 选择第 i 个最小元素 for ( k = i+1; k n; +k )if (ak
16、 ai ) ai ak;,for ( i = 0; i n-1; +i ) ,比较次数=(n-1)+(n-2)+1T(n)=n(n-1)/2,例 三起 泡 排 序,基本操作: 交换两个相邻元素的操作,时间复杂度: O(n2),交换次数:,最好情况:0,最坏情况:n(n-1)/2,最坏情况下的时间复杂度 平均时间复杂度 若不特别说明,以后我们所说的都是最坏情况下的时间复杂度,常见函数的时间复杂度按数量递增排列及增长率。 常数阶O(1) 对数阶O(log2n) 线性阶O(n) 线性对数阶O(nlog2n) 平方阶O(n2) 立方阶O(n3) k次方阶O(nk) 指数阶O(2n),1.10 按增长率
17、由小到大的排列顺序是: (2/3)n , 2100, log2(log2n) , log2n , (log2n)2, , n2/3, n/log2n , n , nlog2n , n3/2, (4/3)n , (3/2)n , n log2n , n! , nn 解题依据为:,4) 算法的存储空间需求,算法的空间复杂度定义为:,表示随着问题规模 n 的增大,算法运行所需存储量的增长率与 g(n) 的增长率相同。,S(n) = O(g(n),算法的存储量包括:,若输入数据所占空间只取决于问题本身,和算法无关,则只需要分析除输入和程序之外的辅助变量所占额外空间。,若所需存储量依赖于特定的输入,则通
18、常按最坏情况考虑。,若所需额外空间相对于输入数据量来说是常数,则称此算法为原地工作。,本章小结 1.基本概念和术语数据、数据元素、数据项、数据结构、数据对象、数据结构(逻辑结构、存储结构、运算)、多形数据类型、抽象数据类型(定义、表示和实现) 2.抽象数据类型:描述、类-C中的基本语句和函数 3.算法:算法的时间复杂度(渐近时间复杂度、最坏情况下的时间复杂度和平均时间复杂度),算法的空间复杂度(原地工作、额外空间)。对O的理解,4.编程常用头文件:#include#include#include / malloc( ),alloc( ),realloc( )等#include / INT_MA
19、X等#include / EOF(=Z或F6),NULL#include / atoi( ) ,rand( ),exit(n)#include / eof( )#include / floor(),ceil( ),abs( )#include / exit(n)#include / cout,cin,5. 函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2 typedef int Status; / Status是函数的类型, /其值是函
20、数结果状态代码,如OK等typedef int Boolean; / Boolean是布尔类型,其 /值是TRUE或FALSE,6.上机环境及注意事项上机环境VC+6.0 ,但我们不用面象对象的思想;除了使用VC中提供的引用参数的概念外,全用的是标准C分析思想。所有用户定义的类型,必须先定义后使用! 例如:ElemType 在使用时,应根据情况定义它的具体念义。,教材: 数据结构(语言版) 严蔚敏 吴伟民编著 清华大学出版社 参考教材: 1Data Structure with C+ 1998/William Ford,William Topp 清华大学出版社 2DATA STRUCTURES
21、 & PROGRAM DESIGN IN C Second Edition Robert Kruse,C.L. Tondo,Bruce P. Leung 清华大学出版社,Prentice Hall International,Inc. 3数据结构习题集(语言版) 严蔚敏等 清华大学出版社,4.算法与数据结构 C语言描述 张乃考编著 高等教育出版社 5.数据结构 耿国华等编 西安电子科技大学 6.数据结构实用教程(C/C+描述)徐孝凯 清华大学出版社 7.数据结构 用面向对象方法与C+描述 殷人昆等 清华大学出版社,8.数据结构算法实现及解析 高一凡 编著西安电 子科技大学 2002.10 9.数据结构学习指导与训练 蒋盛益等 中国水利水电出版社,推荐教学网站和相关专业文献网站 http:/ http:/ http:/ http:/ 1.答案写在书上的作业1.1 1.3 1.4 1.6 1.8 1.10 1.12 2.要交的作业1.16 1.17 1.19 1.20,