严蔚敏版数据结构电子教案PPT课件下载推荐.ppt
《严蔚敏版数据结构电子教案PPT课件下载推荐.ppt》由会员分享,可在线阅读,更多相关《严蔚敏版数据结构电子教案PPT课件下载推荐.ppt(55页珍藏版)》请在冰豆网上搜索。
05,1.1数据结构的研究内容1.2基本概念和术语1.3抽象数据类型的表示与实现1.4算法与算法分析,教学内容,11:
05,N.沃思(NiklausWirth)教授提出:
程序=算法+数据结构电子计算机的主要用途:
早期:
主要用于数值计算。
后来:
处理逐渐扩大到非数值计算领域,能处理多种复杂的具有一定结构关系的数据,1.1数据结构的研究内容,11:
05,书目自动检索系统,书目文件,11:
05,人机对奕问题,11:
05,/(root),bin,lib,user,etc,math,ds,sw,yin,tao,xie,Stack.cpp,Queue.cpp,Tree.cpp,文件系统的系统结构图,11:
05,多叉路口交通灯管理问题,顶点:
一条通路连线:
不能同时通行染色:
有连线的两个顶点不能具有相同颜色,11:
05,求解非数值计算的问题:
设计出合适的数据结构及相应的算法即:
首先要考虑对相关的各种信息如何表示、组织和存储?
数据结构的研究内容为:
研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作。
11:
05,数据结构课程的形成和发展:
形成阶段:
60年代初期,“数据结构”有关的内容散见于操作系统、编译原理和表处理语言等课程。
1968年,“数据结构”被列入美国一些大学计算机科学系的教学计划。
发展阶段:
数据结构的概念不断扩充,包括了网络、集合代数论、关系等“离散数学结构”的内容。
70年代后期,我国高校陆续开设该课程。
05,数据结构所处的地位:
介于数学、计算机硬件和计算机软件三者之间的一门核心课程,北京林业大学信息学院,11:
05,数据结构在计算机学科中的地位,11:
05,课程目的,能够分析研究计算机加工的对象的特性,获得其逻辑结构,根据需求,选择合适存贮结构及其相应的算法;
学习一些常用的算法;
复杂程序设计的训练过程,要求编写的程序结构清楚和正确易读;
初步掌握算法的时间分析和空间分析技术,11:
05,1、数据(data)所有能输入到计算机中去的描述客观事物的符号数值性数据非数值性数据(多媒体信息处理)2、数据元素(dataelement)数据的基本单位,也称结点(node)或记录(record)3、数据项(dataitem)有独立含义的数据最小单位,也称域(field),三者之间的关系:
数据数据元素数据项,例:
学生表个人记录学号、姓名,1.2基本概念和术语,11:
05,整数数据对象N=0,1,2,学生数据对象学生记录的集合,4、数据对象(DataObject):
相同特性数据元素的集合,是数据的一个子集,11:
05,5、数据结构(DataStructure)是相互之间存在一种或多种特定关系的数据元素的集合。
数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
05,数据结构的两个层次:
逻辑结构-数据元素间抽象化的相互关系,与数据的存储无关,独立于计算机,它是从具体问题抽象出来的数学模型。
存储结构(物理结构)-数据元素及其关系在计算机存储器中的存储方式。
05,划分方法一
(1)线性结构-有且仅有一个开始和一个终端结点,并且所有结点都最多只有一个直接前趋和一个后继。
例如:
线性表、栈、队列、串
(2)非线性结构-一个结点可能有多个直接前趋和直接后继。
树、图,逻辑结构,11:
05,线性结构一个对一个,如线性表、栈、队列,树形结构一个对多个,如树,集合数据元素间除“同属于一个集合”外,无其它关系,图形结构多个对多个,如图,逻辑结构,划分方法二,11:
05,存储结构分为:
顺序存储结构借助元素在存储器中的相对位置来表示数据元素间的逻辑关系链式存储结构借助指示元素存储地址的指针表示数据元素间的逻辑关系,存储结构,11:
05,11:
05,1536,元素2,1400,元素1,1346,元素3,元素4,1345,h,链式存储,h,11:
05,逻辑结构和存储结构都相同,但运算不同,则数据结构不同.例如,栈与队列对于一种数据结构,常见的运算插入删除修改查找排序,数据的运算,11:
05,数据的逻辑结构,数据的存储结构,数据的运算:
插入、删除、修改、查找、排序,线性结构,非线性结构,顺序存储,链式存储,线性表,栈、队列,串、数组,树形结构,图形结构,逻辑结构唯一存储结构不唯一运算的实现依赖于存储结构,11:
05,定义:
在一种程序设计语言中,变量所具有的数据种类,数据类型,FORTRAN语言:
整型、实型、和复数型C语言:
基本数据类型:
charintfloatdoublevoid构造数据类型:
数组、结构体、共用体、文件,数据类型是一组性质相同的值的集合,以及定义于这个集合上的一组运算的总称,11:
05,抽象数据类型(ADTs:
AbstractDataTypes),更高层次的数据抽象由用户定义,用以表示应用问题的数据模型由基本的数据类型组成,并包括一组相关的操作,抽象数据类型,11:
05,抽象数据类型可以用以下的三元组来表示:
ADT=(D,S,P)数据对象D上的关系集D上的操作集,ADT抽象数据类型名数据对象:
数据关系:
基本操作:
ADT抽象数据类型名,ADT常用定义格式,11:
05,抽象数据类型,查找插入删除修改,线性表,接口或用户界面,数据类型的物理实现封装,信息隐蔽和数据封装,使用与实现相分离,11:
05,1.3抽象数据类型的表示与实现,抽象数据类型可以通过固有的数据类型(如整型、实型、字符型等)来表示和实现。
它有些类似C语言中的结构(struct)类型,但增加了相关的操作教材中用的是类C语言(介于伪码和C语言之间)作为描述工具,但上机时要用具体语言实现,如C或C+等,11:
05,
(1)预定义常量及类型/函数结果状态代码#defineOK1#defineERROR0#defineINFEASIBLE-1#defineOVERFLOW-2/Status是函数返回值类型,其值是函数结果状态代码。
typedefintStatus;
05,
(2)数据元素被约定为ElemType类型,用户需要根据具体情况,自行定义该数据类型。
(3)算法描述为以下的函数形式:
函数类型函数名(函数参数表)语句序列;
05,(4)内存的动态分配与释放使用new和delete动态分配和释放内存空间分配空间指针变量=new数据类型;
释放空间delete指针变量;
(5)赋值语句(6)选择语句(7)循环语句,11:
05,(8)使用的结束语句形式有:
函数结束语句return循环结束语句break;
异常结束语句exit(异常代码);
05,(9)输入输出语句形式有:
输入语句cin(scanf()输出语句cout(printf()(10)扩展函数有:
求最大值max求最小值min,11:
05,算法定义:
一个有穷的指令集,这些指令为解决某一特定任务规定了一个运算序列算法的描述:
自然语言流程图程序设计语言伪码,1.4算法和算法分析,11:
05,算法的特性:
输入有0个或多个输入输出有一个或多个输出(处理结果)确定性每步定义都是确切、无歧义的有穷性算法应在执行有穷步后结束有效性每一条运算应足够基本,11:
05,算法的评价,正确性可读性健壮性高效性(时间代价和空间代价),北京林业大学信息学院,11:
05,算法效率:
用依据该算法编制的程序在计算机上执行所消耗的时间来度量,算法的效率的度量,事后统计事前分析估计,北京林业大学信息学院,11:
05,1.事后统计:
利用计算机内的计时功能,不同算法的程序可以用一组或多组相同的统计数据区分,缺点:
必须先运行依据算法编制的程序所得时间统计量依赖于硬件、软件等环境因素,掩盖算法本身的优劣,11:
05,2.事前分析估计:
一个高级语言程序在计算机上运行所消耗的时间取决于:
依据的算法选用何种策略问题的规模程序语言编译程序产生机器代码质量机器执行指令速度,同一个算法用不同的语言、不同的编译程序、在不同的计算机上运行,效率均不同,使用绝对时间单位衡量算法效率不合适,11:
05,算法中关键操作(循环和递归)重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作:
T(n)=O(f(n),时间复杂度的渐进表示法,渐进符号(O)的定义:
当且仅当存在一个正的常数C和n0,使得对所有的nn0,有T(n)Cf(n),则T(n)=O(f(n),表示随着n的增大,算法执行的时间的增长率和f(n)的增长率相同,称渐近时间复杂度。
05,n*n阶矩阵加法:
for(i=0;
in;
i+)for(j=0;
jn;
j+)cij=aij+bij;
语句的频度(FrequencyCount):
重复执行的次数:
n*n;
T(n)=O(n2)即:
矩阵加法的运算量和问题的规模n的平方是同一个量级,11:
05,变量计数,x=0;
y=0;
for(intk=0;
kn;
k+)x+;
for(inti=0;
i+)for(intj=0;
j+)y+;
T1(n)=O
(1),T2(n)=O(n),T3(n)=O(n2),T(n)=T1(n)+T2(n)+T3(n)=O(max(1,n,n2)=O(n2),11:
05,voidexam(floatx,intm,intn)floatsum;
im;
i+)/x中各行sumi=0.0;
/数据累加for(intj=0;
j+)sumi+=xij;
/关键操作for(i=0;
i+)/打印各行数据和couti“:
”sumiendl;
/关键操作,渐进时间复杂度为O(max(m*n,m),算法的时间复杂度是由嵌套最深层语句的频度决定的,11:
05,例1:
NN矩阵相乘for(i=1;
i=n;
i+)for(j=1;
j=n;
j+)cij=0;
for(k=1;
k=n;
k+)cij=cij+aik*bkj;
算法中的基本操作语句为cij=cij+aik*bkj;
05,例2:
for(i=1;
j=i;
j+)for(k=1;
k=j;
k+)x=x+1;
语句频度=,11:
05,例3:
分析以下程序段的时间复杂度,i=1;
while(i=n)i=i*2;
即f(n)log2n,取最大值f(n)=log2n,所以该程序段的时间复杂度T(n)=O(log2n),11:
05,【例4】顺序查找,在数组ai中查找值等于e的元素,返回其所在位置。
i+)if(ai=e)returni+1;
return0;
有的情况下,算法中基本操作重复执行的次数还随问题的输入数据集不同而不同,最好情况:
1次最坏情况:
n平均时间复杂度为:
O(n),11:
05,时间复杂度T(n)按数量级递增顺序为:
复杂度高,复杂