第10章 综合应用设计(Java版)_第1页
第10章 综合应用设计(Java版)_第2页
第10章 综合应用设计(Java版)_第3页
第10章 综合应用设计(Java版)_第4页
第10章 综合应用设计(Java版)_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

第10章综合应用设计10.1数组和集合10.2实现迭代器10.3算法设计策略10.4课程设计的目的、要求和选题数据结构(Java版)(第3版)》(Java版)(第3版)》目的目的:综合运用数据结构课程所讨论的基

础知识和基本理论,解决具有一定

规模的、中等难度的实际应用问

题,培养综合应用设计能力。内容:Java集合框架;多种算法设计策 略。数据结构(Java版)(第3版)》(Java版)(第3版)》10.1数组和集合10.1.1Arrays数组类(1)比较两个数组是否相等publicstaticbooleanequals(Object[]a,Object[]b)(2)填充publicstaticvoidfill(Object[]a,Objectobj)publicstaticvoidfill(long[]a,intbegin,intend,longvalue)数据结构(Java版)(第3版)》(Java版)(第3版)》10.1.1Arrays数组类(3)排序publicstaticvoidsort(Object[]a)publicstatic<T>voidsort(T[]a,Comparator<?superT>c)(4)二分法查找publicstaticintbinarySearch(Object[]a,intbegin,intend,Objectkey)publicstatic<T>intbinarySearch(T[]a,Tkey,Comparator<?superT>c)数据结构(Java版)(第3版)》(Java版)(第3版)》java.util.Comparator比较器接口publicinterfaceComparator<T>{intcompare(Tcobj1,Tcobj2); //指定比较两个对象大小的规则}数据结构(Java版)(第3版)》(Java版)(第3版)》10.1.2Java集合框架集合框架结构数据结构(Java版)(第3版)》(Java版)(第3版)》表10-1集合框架中的主要接口和类接口实现接口的类一维数组循环双链表平衡二叉树散列表Set集合TreeSetHashSetList列表ArrayListLinkedListMap映射TreeMapHashMap数据结构(Java版)(第3版)》(Java版)(第3版)》2.迭代(1)java.util.Iterator和ListIterator迭代器接口publicinterfaceIterator<T>//迭代器接口{booleanhasNext();//判断是否有后继元素Tnext();//返回后继元素

voidremove();//删除迭代器对象表示的集合当前元素}数据结构(Java版)(第3版)》(Java版)(第3版)》java.util.ListIterator列表迭代器接口publicinterfaceListIterator<T>extendsIterator<T>{booleanhasPrevious();//判断是否有前驱元素

Tprevious();//返回前驱元素

intnextIndex();//返回后继元素序号

intpreviousIndex();//返回前驱元素序号

voidset(Tx);//将集合当前元素替换为x

voidadd(Tx);//增加元素x}数据结构(Java版)(第3版)》(Java版)(第3版)》(2)java.lang.Iterable可迭代接口publicinterfaceIterable<T>{Iterator<T>iterator();}数据结构(Java版)(第3版)》(Java版)(第3版)》3.Collection接口publicinterfaceCollection<T>extendsIterable<T>{Iterator<T>iterator();//获得迭代器

booleanisEmpty();//判断集合是否为空

intsize();//返回集合的元素个数

booleancontains(Objectobj);//判断是否包含指定元素

booleanadd(Telement);//增加指定元素

booleanremove(Objectobj);//移去首次出现指定元素

voidclear(); //移去所有元素//以下方法描述集合运算,参数是另一个集合

booleanequals(Objectobj);//比较两个集合是否相等

booleancontainsAll(Collection<?>c);//判断集合包含

booleanaddAll(Collection<?extendsT>c);//集合并

booleanremoveAll(Collection<?>c);//集合差

booleanretainAll(Collection<?>c);//仅保留那些也包含在集合c中的元素}数据结构(Java版)(第3版)》(Java版)(第3版)》4.列表 (1)List接口publicinterfaceList<T>extendsCollection<T>{Tget(inti)//返回第i(i≥0)个元素Tset(inti,T

x)//用x替换原第i个元素

ListIterator<T>listIterator()//返回列表迭代器对象}(2)ArrayList类(3)LinkedList类数据结构(Java版)(第3版)》(Java版)(第3版)》5.Collections类publicclassCollections{publicstatic<T>Tmax(Collection<?extendsT>coll,Comparator<?superT>c)//最大值

publicstatic<T>Tmin(Collection<?extendsT>coll,Comparator<?superT>c)//最小值

publicstatic<T>intbinarySearch(List<?extendsComparable<?superT>>list,Tkey)

publicstatic<T>voidsort(List<T>list,Comparator<?superT>c)//排序}数据结构(Java版)(第3版)》(Java版)(第3版)》【例10.1】电话簿。Friend类表示电话簿对象,实现可比较、比较器和序列化接口。TelephoneBookTreeSet类实现电话簿的存储和管理。TelephoneBookJFrame类实现电话簿的图形用户界面,提供添加、查找和删除功能。数据结构(Java版)(第3版)》(Java版)(第3版)》电话簿管理窗口中两个分割窗格的布局层次数据结构(Java版)(第3版)》(Java版)(第3版)》10.2实现迭代器10.2.1基于迭代器的操作10.2.2提供迭代器对象数据结构(Java版)(第3版)》(Java版)(第3版)》10.2.1基于迭代器的操作抽象集合类publicabstractclassAbstractCCollection<T>implementsIterable<T>{publicabstractjava.util.Iterator<T>iterator();

publicStringtoString()

{java.util.Iterator<T>it=this.iterator();

Stringstr="(";while(it.hasNext())//若有后继元素

{str+=it.next().toString();//添加后继元素字符串

if(it.hasNext())str+=",";}returnstr+")";}}数据结构(Java版)(第3版)》(Java版)(第3版)》2.抽象列表类publicabstractclassAbstractLList<T>extendsAbstractCCollection<T>{publicbooleanequals(Objectobj)

{if(obj==this)returntrue;if(!(objinstanceofAbstractLList))returnfalse;java.util.Iterator<T>it1=this.iterator();java.util.Iterator<T>it2=((AbstractLList<T>)obj).iterator();while(it1.hasNext()&&it2.hasNext())if(!(it1.next().equals(it2.next())))

returnfalse;return!it1.hasNext()&&!it2.hasNext();

}}数据结构(Java版)(第3版)》(Java版)(第3版)》10.2.2提供迭代器对象顺序表类提供迭代器对象publicclassSeqList<T>extendsAbstractLList<T>implementsLList<T>{

publicjava.util.Iterator<T>iterator(){//返回Java迭代器对象returnnewSeqIterator();}privateclassSeqIteratorimplementsjava.util.Iterator<T>//私有内部类,实现迭代器接口{……}}数据结构(Java版)(第3版)》(Java版)(第3版)》2.单链表类提供迭代器对象publicclassSinglyLinkedList<T>extendsAbstractLList<T>implementsLList<T>{publicjava.util.Iterator<T>iterator()

{//返回Java迭代器对象returnnewSinglyIterator();}privateclassSinglyIteratorimplementsjava.util.Iterator<T>//私有内部类,实现迭代器接口

{……}}数据结构(Java版)(第3版)》(Java版)(第3版)》本书线性表接口和类的层次关系数据结构(Java版)(第3版)》(Java版)(第3版)》10.3算法设计策略10.3.1分治法10.3.2动态规划法10.3.3贪心法10.3.4回溯法数据结构(Java版)(第3版)》(Java版)(第3版)》10.3.1分治法分治策略分治法(divideandconquer)采用分而治之、逐个解决的策略。孙子兵法曰“凡治众如治寡,分数是也。”分治与递归

结果求解问题(问题规模){if(问题规模足够小)//递归边界条件求解小规模子问题;

else

分解,求解问题(问题规模缩小);//递归调用

return各子问题合并后的解;}分治法的效率分析数据结构(Java版)(第3版)》(Java版)(第3版)》深度优先搜索遍历二叉树、树和图,以及折半查找、快速排序都是采用分治策略的算法。

void遍历(问题规模){if(问题规模>1)//继续递归

{访问当前元素;

while(存在子问题)//分解成若干子问题遍历(子问题规模);//递归调用

}}数据结构(Java版)(第3版)》(Java版)(第3版)》10.3.2动态规划法动态规划动态规划法(dynamicprogramming)也是把一个大问题分解为若干较小的子问题,通过求解子问题而得到原问题的解。动态规划法采用备忘录做法。动态规划法的基本要素最优子结构子问题重叠n数据结构(Java版)(第3版)》(Java版)(第3版)》【例10.2】动态规划法求组合数。nnm012345111212131331414641515101051数据结构(Java版)(第3版)》(Java版)(第3版)》10.3.3贪心法63.6元=10元×6+1元×3+0.1元×6//15张63.6=50+10+2+1+0.5+0.1//6张(个)贪心选择策略贪心法(greedy)是运用局部最优选择以期获得全局最优解的一种策略。数据结构(Java版)(第3版)》(Java版)(第3版)》【例10.3】贪心法求解背包问题。给定n个物品和一个背包,物品i的重量为wi,价值为pi,背包能容纳物品总重量为W;设xi(0≤xi≤1)表示物品i的几分之几,求如何选择装入背包的物品(全部或部分),使背包中物品总价值最大。背包问题的约束条件为≤W,满足约束条件的n元组是一个可用解,使最大的可用解是最优解。数据结构(Java版)(第3版)》(Java版)(第3版)》表10-2背包问题的多个可用解n=3,物品序列为{(80,20),(50,25),(15,45)},W=100。

方案可用解

背包重量背包价值1(1,20/50,0)80+20=10020+25*2/5=302(1,5/50,1)80+5=15=10020+25*5/50+45=67.53(50/80,1,0)50+50=10020*50/80+25=37.54(35/80,1,1)35+50+15=10020*35/80+25+45=78.75数据结构(Java版)(第3版)》(Java版)(第3版)》10.3.3贪心法贪心法的基本要素贪心选择性质最优子结构性质贪心法与动态规划法的区别数据结构(Java版)(第3版)》(Java版)(第3版)》4.最小堆贪心选择策略最简单的应用是求最小值。publicclassMinHeap<Textendsjava.lang.Comparable<T>>//最小堆类{Comparable[]element;//最小堆元素数组intlen;//最小堆元素个数Comparatorcompa

温馨提示

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

评论

0/150

提交评论