数据结构Java语言描述课件

上传人:仙*** 文档编号:241432354 上传时间:2024-06-25 格式:PPT 页数:54 大小:462KB
返回 下载 相关 举报
数据结构Java语言描述课件_第1页
第1页 / 共54页
数据结构Java语言描述课件_第2页
第2页 / 共54页
数据结构Java语言描述课件_第3页
第3页 / 共54页
点击查看更多>>
资源描述
数据结构数据结构v数据结构数据结构即是描述数据的即是描述数据的组织形式组织形式及及操操作作的一门课程。的一门课程。数据的组织形式相关研究数据的组织形式相关研究对相应组织形式的数据上的操作研究。对相应组织形式的数据上的操作研究。什么是程序?什么是程序?v程序(程序(Program)就是)就是供计算机执行后,能完成特供计算机执行后,能完成特定功能的指令序列(定功能的指令序列(Instructions sequence)程序程序=计算机指令序列计算机指令序列v程序包含两方面的内容程序包含两方面的内容数据对象数据对象(Objects)及)及数据对象数据对象之间关系之间关系v数据结构数据结构(Data structure)对这些对象的处理过程对这些对象的处理过程v算法算法(Algorithm)程序数据结构算法程序数据结构算法v程序程序 数据结构数据结构 算法算法(Program Data Structure Algorithm)这个公式由Niklaus Wirth首先提出。Niklaus Wirth 是PASCAL之父和结构化程序 设计的首创者,1984图灵奖获得者。数据数据v数据是信息的载体数据是信息的载体。它能够被计算机识。它能够被计算机识别、存储和加工处理,是计算机程序加别、存储和加工处理,是计算机程序加工的工的“原料原料”。v随着计算机应用领域的扩大,数据的范随着计算机应用领域的扩大,数据的范畴包括:畴包括:整数、实数、字符串、图像和声音整数、实数、字符串、图像和声音等。等。数据元素(数据元素(DataElement)v数据元素是数据的基本单位数据元素是数据的基本单位。数据元素也称元。数据元素也称元素、结点、顶点、记录等。素、结点、顶点、记录等。v一个数据元素可以由若干个一个数据元素可以由若干个数据项数据项(也可称为(也可称为字段、域、属性)组成。字段、域、属性)组成。v数据项数据项是具有独立含义的是具有独立含义的最小标识单位最小标识单位。数据结构数据结构数据的逻辑结构可描述为:数据的逻辑结构可描述为:Group=(D,R)有限个有限个数据元素数据元素的集合的集合这些数据元素间这些数据元素间关系关系的集合的集合数据的逻辑结构可描述为:数据的逻辑结构可描述为:Group=(D,R)数据的逻辑结构数据的逻辑结构线性结构线性结构 A,B,C,,X,Y,Z学 生 成 绩 表86胡孝臣986110395刘忠赏9861107100张卓9861109成绩姓名学号线性表线性表结点间是以线性关系联结结点间是以线性关系联结数据的逻辑结构数据的逻辑结构树形结构树形结构全校学生档案管理的组织方式全校学生档案管理的组织方式1423213数据的逻辑结构数据的逻辑结构图形结构图形结构节点间的连结是任意的节点间的连结是任意的数据的存储结构数据的存储结构顺序存储顺序存储数据的存储结构数据的存储结构链式存储链式存储 v数据的运算通过数据的运算通过算法算法(Algorithm)描述,描述,讨论算法是数据结构课程的重要内容之讨论算法是数据结构课程的重要内容之一。一。v算法算法是对特定问题求解步骤的一种描述。是对特定问题求解步骤的一种描述。v数据结构中常见的算法有:检索、排序、数据结构中常见的算法有:检索、排序、插入、删除、修改等。插入、删除、修改等。算法和算法分析算法和算法分析v(1)有穷性有穷性算法必须总是在执行有穷步之算法必须总是在执行有穷步之后结束。后结束。v(2)确定性确定性算法中每一条指令必须有确切算法中每一条指令必须有确切的含义。不存在二义性。的含义。不存在二义性。v(3)可行性可行性即算法描述的操作都是可以通即算法描述的操作都是可以通过已经实现的过已经实现的基本运算基本运算执行有限次来实现的。执行有限次来实现的。v(4)输入输入一个算法有零个或多个输入。一个算法有零个或多个输入。v(5)输出输出一个算法有一个或多个输出。一个算法有一个或多个输出。算法具有以下五个特性:算法具有以下五个特性:v求解同一计算问题可能有求解同一计算问题可能有许多不同许多不同的算法,如的算法,如何去评价这些算法的优劣?何去评价这些算法的优劣?v选用的算法首先应该是选用的算法首先应该是“正确正确”的。此外,主的。此外,主要考虑如下三点:要考虑如下三点:执行算法所耗费的执行算法所耗费的时间时间;执行算法所耗费的执行算法所耗费的存储空间存储空间,其中主要考虑,其中主要考虑辅辅助存储空间助存储空间;算法应易于理解,易于编码,易于调试等等。算法应易于理解,易于编码,易于调试等等。评价算法好坏的标准评价算法好坏的标准 v算法执行的时间等于所有语句执行时间的总和,算法执行的时间等于所有语句执行时间的总和,是算法所处理的数据个数是算法所处理的数据个数n的函数,表示为:的函数,表示为:O(f(n),vO(f(n)称为该算法的称为该算法的时间复杂度时间复杂度。vO(1)表示算法的时间是一个常数,不依赖于表示算法的时间是一个常数,不依赖于n;vO(n)表示算法的时间与表示算法的时间与n成正比,是线性关系;成正比,是线性关系;vO(n2),O(n3),O(2n)分别称为平方阶、立方分别称为平方阶、立方阶和指数阶;阶和指数阶;O(log2n)为对数阶为对数阶算法的时间性能分析算法的时间性能分析 v定义:定义:如果存在两个如果存在两个正常数正常数c和和n0,对于所,对于所有的有的n n0,有,有f(n)cg(n)记作:记作:f(n)=O(g(n)v定理:定理:若若A(n)=amnm+am-1nm-1+a1n+a0是一个是一个m次多项式次多项式,则:,则:A(n)=O(nm)算法的时间性能分析算法的时间性能分析 v例例1、x+;s=0;其时间复杂度仍为其时间复杂度仍为(1),即,即常量阶常量阶。v例例2、for(i=0;in;i+)x+;s+=x;即时间复杂度为即时间复杂度为线性阶线性阶。语句频度为:语句频度为:其时间复杂度为:其时间复杂度为:语句频度为:语句频度为:其时间复杂度为:其时间复杂度为:例例3、for(i=0;in;i+)for(j=0;jn;j+)cij=0;for(k=0;kn;k+)cij+=aik*bkj;语句频度为:语句频度为:其时间复杂度为:其时间复杂度为:v以下六种计算算法时间的以下六种计算算法时间的多项式多项式是最常用的。其关是最常用的。其关系为:系为:O(1)O(logn)O(n)O(nlogn)O(n2)O(n3)v指数时间指数时间的关系为:的关系为:O(2n)O(n!)O(nn)v参见参见P53图图4-2,图,图4-3v当当n取得很大时,取得很大时,指数时间算法指数时间算法运算时间运算时间远远超过远远超过多项式时间算法多项式时间算法。多项式时间复杂度多项式时间复杂度和和指数时间复杂度指数时间复杂度v空间复杂度空间复杂度:算法所需存储空间的度量,算法所需存储空间的度量,记作记作:S(n)=O(g(n)其中其中n为问题的规模为问题的规模(或大小或大小)算法的存储空间需求算法的存储空间需求数据类型数据类型v类型类型是一组是一组值值的的集合集合。v数据类型数据类型是指一个是指一个类型类型和定义在该类型和定义在该类型上的上的操作集合操作集合。v数据类型定义了数据的数据类型定义了数据的性质性质、取值范围取值范围以及对数据所能进行的以及对数据所能进行的各种操作各种操作。v如:如:Java中整型类型中整型类型int的值集是的值集是-232,-2,-1,0,1,2,232-1,还包括对这个还包括对这个整数类型进行的加整数类型进行的加(+)、减、减(-)、乘、乘(*)、除、除(/)和求模和求模(%)操作操作。数据类型数据类型vJava语言提供了一些语言提供了一些基本数据类型基本数据类型。v利用基本数据类型,软件设计人员还可利用基本数据类型,软件设计人员还可以设计出各种以设计出各种复杂的数据类型复杂的数据类型。86胡孝臣986110395刘忠赏9861107100张卓9861109成绩姓名学号抽象数据类型(抽象数据类型(AbstractType,简称,简称ADT)vADT是指是指抽象数据的组织抽象数据的组织和与之相关的和与之相关的操作操作。可。可以看作是以看作是数据的逻辑结构数据的逻辑结构及其在逻辑结构上定义及其在逻辑结构上定义的的操作操作。v一个一个ADT可描述为:可描述为:ADTADT-Name Data:/数据说明数据说明数据元素之间逻辑关系的描述数据元素之间逻辑关系的描述Operation1:/操作操作1,Operation2:/操作操作2 第一章:面向对象的方法v基本概念数据抽象对象类接口1.3比率类(比率类(Ratio.java)vpublicclassRatiovvprotectedintnumerator;/numeratorofratiovprotectedintdenominator;/denominatorofratiovpublicRatio(inttop,intbottom)v/prebottom!=0v/postconstructsaratioequivalenttotop:bottomvvnumerator=top;vdenominator=bottom;vreduce();vv publicintgetNumerator()vvreturnnumerator;vv publicintgetDenominator()vvreturndenominator;vv publicdoublegetValue()vvreturn(double)numerator/(double)denominator;v1.3比率类(比率类(Ratio.java)v publicRatioadd(Ratioother)vvreturnnewRatio(this.numerator*other.denominator+vthis.denominator*other.numerator,vthis.denominator*other.denominator);vv vprotectedvoidreduce()vvintdivisor=gcd(numerator,denominator);vnumerator/=divisor;vdenominator/=divisor;v1.3比率类(比率类(Ratio.java)v protectedstaticintgcd(inta,intb)vvif(a=0)vif(b=0)return1;velsereturnb;vvif(ba)returngcd(b,a);vreturngcd(b%a,a);vv vpublicStringtoString()vvreturngetNumerator()+/+getDenominator();v1.3比率类(比率类(Ratio.java)1.3Ratio(比率)类的应用(比率)类的应用v publicstaticvoidmain(Stringargs)vvRatior=newRatio(1,1);/r=1.0vr=newRatio(1,2);/r=0.5vr.add(newRatio(1,3);/sumcomputed,butrstill0.5vr=r.add(newRatio(2,8);/r=0.75vSystem.out.println(r.getValue();/0.75printedvSystem.out.println(r.toString();/callstoString()System.out.println(r);/callstoString()vv1.4 银行帐户类银行帐户类(BankAccount.java)vpublicclassBankAccountvvprotectedStringaccount;/theaccountnumbervprotecteddoublebalance;/thebalanceassociatedwithaccountvpublicBankAccount(Stringacc,doublebal)vvaccount=acc;vbalance=bal;vvpublicbooleanequals(Objectother)vvBankAccountthat=(BankAccount)other;vreturnthis.account.equals(that.account);v1.4 银行帐户类银行帐户类(BankAccount.java)vpublicStringgetAccount()vvreturnaccount;vvpublicdoublegetBalance()vvreturnbalance;vvpublicvoiddeposit(doubleamount)vvbalance=balance+amount;vvpublicvoidwithdraw(doubleamount)vvbalance=balance-amount;v1.4 银行帐户类的应用银行帐户类的应用v向一个向一个10年期,利息年期,利息%5的帐户存的帐户存100$向一个向一个20年期,利息年期,利息%2.5的帐户存的帐户存100$试比较采用哪一种投资最好试比较采用哪一种投资最好?1.4 银行帐户类的应用银行帐户类的应用publicstaticvoidmain(Stringargs)BankAccountjd=newBankAccount(JainDough,100.00);BankAccountjs=newBankAccount(JonSmythe,100.00);for(intyears=0;years10;years+)jd.deposit(jd.getBalance()*0.05);for(intyears=0;years20;years+)js.deposit(js.getBalance()*0.025);1.4 银行帐户类的应用银行帐户类的应用System.out.println(Jaininvests$100over10yearsat5%.);System.out.println(After10years+jd.getAccount()+has$+jd.getBalance();System.out.println(Joninvests$100over20yearsat2.5%.);System.out.println(After20years+js.getAccount()+has$+js.getBalance();1.5 一般用途类:关联(一般用途类:关联(Assocoation.java)vpackagestructure;vimportjava.util.Map;vpublicclassAssociationimplementsMap.EntryvvprotectedObjecttheKey;/thekeyofthekey-valuepairvprotectedObjecttheValue;/thevalueofthekey-valuepairvpublicAssociation(Objectkey,Objectvalue)vvAssert.pre(key!=null,Keymustnotbenull.);vtheKey=key;vtheValue=value;vvpublicAssociation(Objectkey)vvthis(key,null);vvpublicbooleanequals(Objectother)vvAssociationotherAssoc=(Association)other;vreturngetKey().equals(otherAssoc.getKey();vvvpublicObjectgetValue()vvreturntheValue;vvpublicObjectgetKey()vvreturntheKey;v1.5 一般用途类:关联(一般用途类:关联(Assocoation.java)vpublicObjectsetValue(Objectvalue)vvObjectoldValue=theValue;vtheValue=value;vreturnoldValue;vvpublicStringtoString()vvStringBuffers=newStringBuffer();vs.append();vreturns.toString();vv1.5 一般用途类:关联(一般用途类:关联(Assocoation.java)1.5 关联的应用(关联的应用(atinLay.java)importstructure.*;vpublicclassatinLayv/apiglatintranslatorforninewordsvpublicstaticvoidmain(Stringargs)vvAssociationdict=newAssociation9;vdict0=newAssociation(a,aay);vdict1=newAssociation(bad,adbay);vdict2=newAssociation(had,adhay);vdict3=newAssociation(dad,adday);vdict4=newAssociation(day,ayday);vdict5=newAssociation(hop,ophay);vdict6=newAssociation(on,onay);vdict7=newAssociation(pop,oppay);vdict8=newAssociation(sad,adsay);vfor(intargn=0;argnargs.length;argn+)v/foreachargumentvfor(intdictn=0;dictndict.length;dictn+)v/checkeachdictionaryentryvif(dictdictn.getKey().equals(argsargn)vSystem.out.println(dictdictn.getValue();vvvv1.5 关联的应用(关联的应用(atinLay.java)vfor(intargn=0;argnargs.length;argn+)v/foreachargumentvfor(intdictn=0;dictndict.length;dictn+)v/checkeachdictionaryentryvif(dictdictn.getKey().equals(argsargn)vSystem.out.println(dictdictn.getValue();vvvv1.6 字列表(字列表(atinLay.java)vfor(intargn=0;argnargs.length;argn+)v/foreachargumentvfor(intdictn=0;dictndict.length;dictn+)v/checkeachdictionaryentryvif(dictdictn.getKey().equals(argsargn)vSystem.out.println(dictdictn.getValue();vvvv1.5 关联的应用(关联的应用(atinLay.java)1.8 接口(接口(Interface)v描述接口而并不实现接口里面的方法v类中实现接口v增加灵活性vDesign by contract1.8 接口(接口(Interface)publicinterfaceStructurepublicintsize();publicbooleanisEmpty();publicvoidclear();publicbooleancontains(Objectvalue);publicvoidadd();publicvoidremove();1.8 接口的实现接口的实现PublicclassWordlistimplementsStructureinterfaceAlarmvoidalarm();abstractclassDoorabstractvoidopen();abstractvoidclose();classAlarmDoorextendsDoorimplementsAlarmvoidopen()voidclose()voidalarm()1.9 用户用户v程序员在将类导入到程序中时使用了类。v对于一些自己实现的类,自己可能是唯一的用户。v站在用户的角度设计并遵守你的接口。v程序的注释,文档v类的数据成员应受保护,不可从外部直接访问,需遵守接口访问规则第二章 注释、条件、断言v基本概念前提条件后置条件断言版权代码注释v精心设计的文字,用来描述程序中:变量的使用,机器的状态,设计者的意图和技巧等。v何时写注释?应和程序代码同时编写。v注释出现在何处?对代码感觉不放心的地方。v注释的作用有利于理解程序代码。以便让别人或者今后自己查看原有代码。前置条件n描述方法在何种情况下可以被调用,并且能够得到正确的结果。例如:一个除法方法要求分母非0平方根函数要求非负/pre:x is nonnegative/pre:denominator can not be zero前置条件v调用方法时不满足前置条件时会怎样?v答:Java中,前置条件不满足的情况下调用一个方法是合法的,但不会得到预想的结果。v如果一个方法没有前置条件,意味着什么?v答:说明该程序在任何情况下调用都不会出错。后置条件v在调用满足前提条件下,方法运行完毕后的状态。v每一个例程都应有后置条件。(如果没有后置条件意味着什么?)Public void withdraw(double amount)/pre:there are sufficient funds in the account/post:withdraw money from the bank account balance=balance amount;前提、后置条件的作用v不足以保证你正确地编写代码,也没有明确程序执行的过程。v提供统一的方法对对所编写的程序进行文档化(documenting)v程序员应该花一定的时间来斟酌前提、后置条件,以便理清思路。断言(Assert)v断言是你对自己的程序状态进行假定。(类似于报警器)v断言正确,程序继续执行v断言失败,程序挂起,显示出错信息v例子:P25 Examplesv程序员如果肯定代码正确,可以删除断言v去除断言可以提高程序的运行性能
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!