数据结构(Java语言实现) 课件 第1章 数据结构概述_第1页
数据结构(Java语言实现) 课件 第1章 数据结构概述_第2页
数据结构(Java语言实现) 课件 第1章 数据结构概述_第3页
数据结构(Java语言实现) 课件 第1章 数据结构概述_第4页
数据结构(Java语言实现) 课件 第1章 数据结构概述_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构(Java语言实现)结构Java实据现数学习目标LearningObjectives1数据结构能做什么2数据结构与算法的相关概念3能利用数据结构知识对问题建模6提高Java语言开发水平和调试技巧4能编写出算法解决实际问题5会分析算法的时间复杂度和空间复杂度7提高算法设计能力内容与特点ContentandCharacteristics1突出体现数据结构的算法实践2案例丰富,精选自考研、软考试题3图文并茂,内容讲解细致4配套PPT、源代码、视频等,资源丰富5内容讲解理论与实践并重,实用性强第1章绪论结构Java实据现数目录CONTENTS1.1数据结构相关概念1.2抽象数据类型1.5算法分析1.3数据的逻辑结构与存储结构1.4算法的特性与算法的描述1.6关于数据结构的地位及学习方法1.1数据结构相关概念学习基础学习认知能力数据元素(dataelement)是数据的基本单位,在计算机程序中通常作为一个整体来考虑和处理。一个数据元素可由若干个数据项(dataitem)组成,数据项是数据不可分割的最小单位。0102数据(data)是描述客观事物的符号,能输入到计算机中并能被计算机程序处理的符号集合。工

号姓

名性

别籍

贯所在院系出生年月职

称2006002孙冬平男河南计算机学院1970.10教

授2019056朱

琳女北京文学院1985.08讲师2015028刘晓光男陕西软件学院1981.11副教授表1-1教职工基本情况1.1数据结构相关概念学习基础学习认知能力数据结构(datastructure)即数据的组织形式,它是数据元素之间存在的一种或多种特定关系的数据元素集合。0304数据对象(dataobject)是性质相同的数据元素的集合,是数据的一个子集。1.1数据结构相关概念学习基础学习认知能力在Java语言中,按照数据的构造,数据类型可分为两类:基本数据类型和引用数据类型,其中,基本数据类型有char、byte、short、int、long、float、double、boolean等8种,引用数据类型有数组、class(类)、接口。05数据类型(datatype)用来刻画一组性质相同的数据及其上的操作。1.2抽象数据类型及其描述1.2.1抽象数据类型的定义抽象数据类型(AbstractDataType,ADT)是对具有某种逻辑关系的数据类型进行描述,并在该类型上进行的一组操作。抽象数据类型描述的是一组逻辑上的特性,与在计算机内部表示无关。计算机中的整数数据类型是一个抽象数据类型,不同的处理器可能实现方法不同,但其逻辑特性相同,即加、减、乘、除等运算是一致的。抽象数据类型,就是对象的数据模型,它定义了数据对象、数据对象之间的关系及对数据对象的操作。抽象数据类型通常是指用户定义的解决应用问题的数据模型,包括数据的定义和操作。例如,Java、C++、Python中的类就是一个抽象数据类型,它包括用户类型的定义和在用户类型上的一组操作。1.2抽象数据类型及其描述1.2.2抽象数据类型的描述抽象数据类型包括3个方面的内容:数据对象、数据关系和基本运算,通常采用三元组(D,SP)来表示。其基本格式如下:ADT抽象数据类型名{

数据对象:数据对象的描述数据关系:数据关系的描述基本运算:基本运算的声明}ADT抽象数据类型名1.2抽象数据类型及其描述1.2.2抽象数据类型描述ADTMySet{数据对象:{ai|0≤ai≤n-1,ai∈R}。数据关系:无。基本操作:(1)InitSet(&S):初始化操作,建立一个空的集合S。(2)SetEmpty(S):若集合S为空,返回True,否则返回False。(3)GetSetElem(S,i,&e):返回集合S的第i个位置元素值给e。(4)LocateElem(S,e):在集合S中查找与给定值e相等的元素,如果查找成功返回该元素在表中的序号,否则返回0。(5)InsertSet(&S,e):在集合S中插入一个新元素e。(6)DelSet(&S,i,&e):删除集合S中的第i个位置元素,并用e返回其值。(7)SetLength(S):返回集合S中的元素个数。(8)ClearSet(&L):将集合S清空。(9)UnionSet(&S,T):合并集合S和T,即将T中的元素插入到S中,相同的元素只保留一个。(10)DiffSet(&S,T):求两个集合的差集,即S-T,即删除S中与T中相同的元素。(11)DispSet(S):输出集合S中的元素。}ADTMySet1.2抽象数据类型及其描述1.2.2抽象数据类型描述publicclassMySet<T>//集合的类型定义{

Tlist[];

intlength;

finalintMAXSIZE=100;

MySet()//集合的初始化

{

list=(T[])newObject[MAXSIZE];

length=0;

}

publicbooleanSetEmpty()

//判断集合是否为空,若为空,则返回true;否则,返回false

{

if(length<=0)

returntrue;

else

returnfalse;

}

1.2抽象数据类型及其描述1.2.2抽象数据类型描述publicintSetLength()//返回集合中元素个数

{

returnlength;

}

publicvoidClearSet()//清空集合

{

length=0;

}

publicbooleanInsertSet(Te)//在集合中插入一个元素e

{

if(length>=MAXSIZE-1){

System.out.println("下标越界,不能插入!");

returnfalse;

}

else{

list[length++]=e;

returntrue;

}

}

1.2抽象数据类型及其描述1.2.2抽象数据类型描述publicbooleanDelSet(intpos)

//删除集合中的第pos个元素

{

if(length<=0)

{

System.out.println("集合为空,不能进行删除操作!");

returnfalse;

}

else{

for(inti=pos-1;i<length-1;i++)

{

list[i]=list[i+1];

length--;

}

returntrue;

}

}

1.2抽象数据类型及其描述1.2.2抽象数据类型描述publicTGetSetElem(inti)throwsException//获取集合中第i个元素赋给e

{

if(length<=0){System.out.println("集合为空,不能获取任何元素!");}

elseif(i<1&&i>length){

thrownewException("下标错误!");

}else{

Te=list[i-1];

returne;}

}

publicintLocateElem(Te)//查找集合中元素值为e的元素,返回其序号

{

for(inti=1;i<length+1;i++)

{

if(list[i-1]==e)

returni;

}

return0;

}

1.2抽象数据类型及其描述1.2.2抽象数据类型描述publicintUnionSet(MySetS,MySetT)throwsException

//合并集合S和T

{

if(S.length+T.length>=S.MAXSIZE)

return-1;

else{

for(inti=1;i<T.length+1;i++){

Te=(T)T.GetSetElem(i);

if(S.LocateElem(e)==0)

S.InsertSet(e);

}

}

}

1.2抽象数据类型及其描述1.2.2抽象数据类型描述publicintDiffSet(MySetS,MySetT)throwsException//求集合S和T的差集

{

if(S.length<=0)

return-1;

else{

for(inti=1;i<T.length+1;i++){

Te=(T)T.GetSetElem(i);

intpos=S.LocateElem(e);

if(pos!=0)

S.DelSet(pos);

}

return1;

}

}

1.3数据的逻辑结构与存储结构1.3.1逻辑结构(1)集合。数据元素除了同属于一个集合外,数据元素之间没有其他关系。(2)线性结构。结构中的数据元素之间是一对一的关系。(3)树形结构。结构中的数据元素之间存在一种一对多的层次关系。(4)图结构。结构中的数据元素是多对多的关系。1.3数据的逻辑结构与存储结构1.3.2存储结构存储结构也称为物理结构,数据的逻辑结构在计算机中存储形式。通常有两种:顺序存储结构和链式存储结构。采用顺序存储的字符串“abcdef”地址连续的存储的存储结构如图1-9所示。链式存储是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的1.4算法的特性与算法的描述算法与数据结构关系密切。两者既有联系又有区别。数据结构与算法的联系可用一个公式描述:程序=算法+数据结构数据结构是算法实现的基础,算法依赖于某种数据结构才能实现。数据结构与算法相辅相成,不是相互孤立存在的。数据结构关注的是数据的逻辑结构、存储结构以及基本操作,而算法更多的是关注如何在数据结构的基础上怎样设计解决实际问题的方法。算法是编程思想,数据结构则是为了算法实现方便而提供的存储结构及基本操作,是算法设计的基础。:1.4算法的特性与算法的描述1.4.1算法的定义算法(algorithm)是解决特定问题求解步骤的描述,在计算机中表现为有限的操作序列。求n个数中最大者的问题for(i=0;i<a.length;i++)//for循环处理if(max<a[i])

//判断是否满足max小于a[i]的条件

max=a[i];

//如果满足条件,将a[i]赋值给maxSystem.out.println("max=:"+max);1.4算法的特征与算法的描述1.4.2算法的五大特性(1)有穷性(finiteness)。有穷性指的是算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。(2)确定性(definiteness)。算法的每一步骤都具有确定的含义,不会出现二义性。算法在一定条件下只有一条执行路径,也就是相同的输入只能有一个唯一的输出结果。(3)可行性(feasibility)。算法的每个操作都能够通过执行有限次基本运算完成。(4)输入(input)。算法具有零个或多个输入。(5)输出(output)。算法至少有一个或多个输出。输出的形式可以是打印输出,也可以是返回一个或多个值。1.4算法的特征与算法的描述算法的描述方式有多种,如自然语言、伪代码(或称为类语言)、程序流程图及程序设计语言(如Java、Python、C、C++)等。1.4.3算法的描述1.4算法的特征与算法的描述2.程序流程图法判断m是否为质数的程序流程图如图1-9所示。

采用自然语言描述算法直观性和可读性不强;

采用程序流程图描述算法比较直观,可读性好,缺点是不能直接转化为计算机程序,移植性不好。1.4.3算法的描述1.4算法的特征与算法的描述3.类语言法voiddcf()//求最大公约数{ input(m,n); //输入两个正整数

r=m; do{ m=n; n=r; r=m%n; //r表示两个数的余数

}while(r); print(n); //输出最大公约数}1.4.3算法的描述1.4算法的特性与算法的描述4.程序设计语言法voiddcf()//求最大公约数{intm,n,r;System.out.println("请输入两个正整数m和n:");Scannersc=newScanner(System.in);Stringa[]=sc.nextLine().split("");m=Integer.parseInt(a[0]);n=Integer.parseInt(a[1]);System.out.print(String.format("dcf(%d,%d)=",m,n));r=m;1.4.3算法的描述do{

//使用辗转相除法法求解最大公约数

m=n;n=r;r=m%n;//r存放两个数的余数

}while(r!=0);System.out.println(n);//输出最大公约数}1.5算法分析1.算法的正确性(correctness)算法至少应该包括对于输入、输出和处理无歧义性的描述,能正确反映问题的需求,且能够得到问题的正确答案。通常算法的正确性应包括以下4个层次。(1)算法对应的程序没有语法错误。(2)对于几组输入数据能得到满足规格要求的结果。(3)对于典型的、苛刻的带有刁难性的输入数据,能得到满足规格要求的结果。(4)对于一切合法的输入都能得到满足要求的结果。1.5.1算法设计的四个目标1.5算法分析2.可读性(readability)算法主要是为了人们方便阅读和交流,其次才是计算机执行。可读性好有助于人们对算法的理解,晦涩难懂的程序往往隐含着不易被发现的错误,难以调试和修改。3.健壮性(robustness)当输入数据不合法时,算法也应该能做出反应或进行处理,而不会产生异常或莫名其妙的输出结果。4.高效率和低存储量(Highefficiencyandlowstorage)效率指的是算法的执行时间。对于同一个问题,如果有多个算法能够解决,执行时间短的算法效率高,执行时间长的效率低。1.5.1算法设计的四个目标1.5算法分析1.事后统计方法目前计算机内部大都有计时功能,有的甚至可精确到毫秒级,不同算法的程序可通过一组或若干组相同的测试程序和数据以分辨算法的优劣。缺点:一是必须依据算法事先编制好程序,这通常需要花费大量的时间与精力;

二是时间的长短依赖计算机硬件和软件等环境因素,有时会掩盖算法本身的优劣。1.5.2算法效率评价1.5算法分析2.事前分析估算方法在计算机程序编制前,对算法依据数学中的统计方法进行估算。这个方法可行,主要是因为算法的程序在计算机上的运行时间取决于以下因素: 算法采用的策略、方法。 编译产生的代码质量。 问题的规模。 书写的程序语言,对于同一个算法,语言级别越高,执行效率越低。 机器执行指令的速度。1.5.2算法效率评价1.5算法分析例如,两个n×n矩阵相乘的算法和语句的的频度如下。

每条语句的频度for(i=0;i<n;i++)n

for(j=0;j<n;j++)n2{

a[i][j]=0;

n2

for(k=0;k<n;k++)n3

a[i][j]=a[i][j]+a[i][k]*a[k][j];n3}总的执行次数为1.5.2算法效率评价f(n)=n+n2+n2+n3+n3=2n3+2n2+n1.5算法分析1.什么是算法时间复杂度在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作T(n)=O(f(n))。它表示随问题规模n的增大,算法的执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。1.5.3算法时间复杂度1.5算法分析(1)x=x+1;(2)for(i=1;i<n+1;i++)x=x+1;(3)for(i=1;i<n+1;i++)for(j=1;j<n+1;j++)

x=x+1;程序段(1)的时间复杂度为O(1),称为常量阶;程序段(2)的时间复杂度为O(n),称为线性阶;程序段(3)的时间复杂度为O(n2),称为平方阶。此外算法的时间复杂度还有对数阶O(log2n)、指数阶O(2n)等1.5.3算法时间复杂度1.5算法分析常用的时间复杂度所耗费的时间从小到大依次是O(1)<O(log2n)<O(n)<O(n2)<O(n3)<O(2n)<O(n!)1.5.3算法时间复杂度1.5算法分析2.算法时间复杂度分析举例例1.1分析以下程序段的时间复杂度。for(i=1;i<n;i++)

for(j=1;j<I;j++){

x=x+1;//基本操作

a[i][j]=x;//基本操作}该程序段中的基本操作是第二层for循环中的语句,即x=x+1和a[i][j]=x,其语句频度为(n-1)(n-2)/2。因此,其时间复杂度为O(n2)。1.5算法分析2.算法时间复杂度分析举例例1.2分析以下算法的时间复杂度。voidFun(){

inti=1;

while(i<=n)

i=i*2;//基本操作}该函数fun()的基本运算是i=i*2,设执行时间次数为f(n),则2f(n)≤n,则有f(n)≤log2n。因此,时间复杂度为O(log2n)。1.5算法分析2.算法时间复杂度分析举例例1.3分析以下算法的时间复杂度。

voidFunc(){

inti=0;

ints=0;

while(s<n){

i=i+1;//基本操作

s+=i;//基本操作}}该算法中的基本操作是while循环中的语句,设while循环次数为f(n),则变量i从0到f(n),因此循环次数为f(n)*(f(n)+1)/2≤n,则f(n)≤

,故时间复杂度为O()。1.5算法分析例1.4一个算法所需时间由以下递归方程表示,分析算法的时间复杂度。

根据以上递归方程,可得T(n)=2T(n-1)+1=2(2T(n-2)+1)+1=2*2T(n-2)+2+1=2*2*(2T(n-3)+1)+2+1=……=2k-1(2T(n-k)+1)+2k-2+…+2+1=…=2n-2(2T(1)+1)+2n-2+…+2+1=2n-1+…+2+1=2n-1因此,该算法的时间复杂度为O(2n)。1.5算法分析1.5.4算法空间复杂度空间复杂度(spacecomplexity)作为算法所需存储空间的量度,记作S(n)=O(f(n))。n为问题的规模,f(n)为语句关于n的所占存储空间的函数。例1.5以下是一个简单插入排序算法,分析算法的空间复杂度。for(i=0;i<n-1;i++){

t=a[i+1];

j=i;

while(j>=0&&t<a[j]){

a[j+1]=a[j];

j=j-1;}

a[j+1]=t;}该算法借助了变量t,与问题规模n的大小无关,空间复杂度为O(1)。1.5算法分析1.5.4算法空间复杂度例1.6以下算法是求n个数中的最大者,分析算法的空间复杂度。intFindMax(inta[],intn){

if(n<=1)

returna[0];

else:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论