版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第10章綜合應(yīng)用設(shè)計10.1數(shù)組和集合10.2實現(xiàn)迭代器10.3算法設(shè)計策略10.4課程設(shè)計的目的、要求和選題數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》目的目的:綜合運用數(shù)據(jù)結(jié)構(gòu)課程所討論的基
礎(chǔ)知識和基本理論,解決具有一定
規(guī)模的、中等難度的實際應(yīng)用問
題,培養(yǎng)綜合應(yīng)用設(shè)計能力。內(nèi)容:Java集合框架;多種算法設(shè)計策 略。數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》10.1數(shù)組和集合10.1.1Arrays數(shù)組類(1)比較兩個數(shù)組是否相等publicstaticbooleanequals(Object[]a,Object[]b)(2)填充publicstaticvoidfill(Object[]a,Objectobj)publicstaticvoidfill(long[]a,intbegin,intend,longvalue)數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》10.1.1Arrays數(shù)組類(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)數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》java.util.Comparator比較器接口publicinterfaceComparator<T>{intcompare(Tcobj1,Tcobj2); //指定比較兩個對象大小的規(guī)則}數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》10.1.2Java集合框架集合框架結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》表10-1集合框架中的主要接口和類接口實現(xiàn)接口的類一維數(shù)組循環(huán)雙鏈表平衡二叉樹散列表Set集合TreeSetHashSetList列表ArrayListLinkedListMap映射TreeMapHashMap數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》2.迭代(1)java.util.Iterator和ListIterator迭代器接口publicinterfaceIterator<T>//迭代器接口{booleanhasNext();//判斷是否有后繼元素Tnext();//返回后繼元素
voidremove();//刪除迭代器對象表示的集合當(dāng)前元素}數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》java.util.ListIterator列表迭代器接口publicinterfaceListIterator<T>extendsIterator<T>{booleanhasPrevious();//判斷是否有前驅(qū)元素
Tprevious();//返回前驅(qū)元素
intnextIndex();//返回后繼元素序號
intpreviousIndex();//返回前驅(qū)元素序號
voidset(Tx);//將集合當(dāng)前元素替換為x
voidadd(Tx);//增加元素x}數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》(2)java.lang.Iterable可迭代接口publicinterfaceIterable<T>{Iterator<T>iterator();}數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》3.Collection接口publicinterfaceCollection<T>extendsIterable<T>{Iterator<T>iterator();//獲得迭代器
booleanisEmpty();//判斷集合是否為空
intsize();//返回集合的元素個數(shù)
booleancontains(Objectobj);//判斷是否包含指定元素
booleanadd(Telement);//增加指定元素
booleanremove(Objectobj);//移去首次出現(xiàn)指定元素
voidclear(); //移去所有元素//以下方法描述集合運算,參數(shù)是另一個集合
booleanequals(Objectobj);//比較兩個集合是否相等
booleancontainsAll(Collection<?>c);//判斷集合包含
booleanaddAll(Collection<?extendsT>c);//集合并
booleanremoveAll(Collection<?>c);//集合差
booleanretainAll(Collection<?>c);//僅保留那些也包含在集合c中的元素}數(shù)據(jù)結(jié)構(gòu)(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類數(shù)據(jù)結(jié)構(gòu)(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)//排序}數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》【例10.1】電話簿。Friend類表示電話簿對象,實現(xiàn)可比較、比較器和序列化接口。TelephoneBookTreeSet類實現(xiàn)電話簿的存儲和管理。TelephoneBookJFrame類實現(xiàn)電話簿的圖形用戶界面,提供添加、查找和刪除功能。數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》電話簿管理窗口中兩個分割窗格的布局層次數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》10.2實現(xiàn)迭代器10.2.1基于迭代器的操作10.2.2提供迭代器對象數(shù)據(jù)結(jié)構(gòu)(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+")";}}數(shù)據(jù)結(jié)構(gòu)(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();
}}數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》10.2.2提供迭代器對象順序表類提供迭代器對象publicclassSeqList<T>extendsAbstractLList<T>implementsLList<T>{
publicjava.util.Iterator<T>iterator(){//返回Java迭代器對象returnnewSeqIterator();}privateclassSeqIteratorimplementsjava.util.Iterator<T>//私有內(nèi)部類,實現(xiàn)迭代器接口{……}}數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》2.單鏈表類提供迭代器對象publicclassSinglyLinkedList<T>extendsAbstractLList<T>implementsLList<T>{publicjava.util.Iterator<T>iterator()
{//返回Java迭代器對象returnnewSinglyIterator();}privateclassSinglyIteratorimplementsjava.util.Iterator<T>//私有內(nèi)部類,實現(xiàn)迭代器接口
{……}}數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》本書線性表接口和類的層次關(guān)系數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》10.3算法設(shè)計策略10.3.1分治法10.3.2動態(tài)規(guī)劃法10.3.3貪心法10.3.4回溯法數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》10.3.1分治法分治策略分治法(divideandconquer)采用分而治之、逐個解決的策略。孫子兵法曰“凡治眾如治寡,分數(shù)是也?!狈种闻c遞歸
結(jié)果求解問題(問題規(guī)模){if(問題規(guī)模足夠小)//遞歸邊界條件求解小規(guī)模子問題;
else
分解,求解問題(問題規(guī)??s?。?;//遞歸調(diào)用
return各子問題合并后的解;}分治法的效率分析數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》深度優(yōu)先搜索遍歷二叉樹、樹和圖,以及折半查找、快速排序都是采用分治策略的算法。
void遍歷(問題規(guī)模){if(問題規(guī)模>1)//繼續(xù)遞歸
{訪問當(dāng)前元素;
while(存在子問題)//分解成若干子問題遍歷(子問題規(guī)模);//遞歸調(diào)用
}}數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》10.3.2動態(tài)規(guī)劃法動態(tài)規(guī)劃動態(tài)規(guī)劃法(dynamicprogramming)也是把一個大問題分解為若干較小的子問題,通過求解子問題而得到原問題的解。動態(tài)規(guī)劃法采用備忘錄做法。動態(tài)規(guī)劃法的基本要素最優(yōu)子結(jié)構(gòu)子問題重疊n數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》【例10.2】動態(tài)規(guī)劃法求組合數(shù)。nnm012345111212131331414641515101051數(shù)據(jù)結(jié)構(gòu)(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)是運用局部最優(yōu)選擇以期獲得全局最優(yōu)解的一種策略。數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》【例10.3】貪心法求解背包問題。給定n個物品和一個背包,物品i的重量為wi,價值為pi,背包能容納物品總重量為W;設(shè)xi(0≤xi≤1)表示物品i的幾分之幾,求如何選擇裝入背包的物品(全部或部分),使背包中物品總價值最大。背包問題的約束條件為≤W,滿足約束條件的n元組是一個可用解,使最大的可用解是最優(yōu)解。數(shù)據(jù)結(jié)構(gòu)(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數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》10.3.3貪心法貪心法的基本要素貪心選擇性質(zhì)最優(yōu)子結(jié)構(gòu)性質(zhì)貪心法與動態(tài)規(guī)劃法的區(qū)別數(shù)據(jù)結(jié)構(gòu)(Java版)(第3版)》(Java版)(第3版)》4.最小堆貪心選擇策略最簡單的應(yīng)用是求最小值。publicclassMinHeap<Textendsjava.lang.Comparable<T>>//最小堆類{Comparable[]element;//最小堆元素數(shù)組intlen;//最小堆元素個數(shù)Comparatorcompa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024特許加盟合同協(xié)議范本
- 2025年度礦產(chǎn)資源整合采礦權(quán)抵押交易合同樣本3篇
- 2025年度圓通快遞快遞員權(quán)益保障及培訓(xùn)合同3篇
- 2025年度工業(yè)園區(qū)廠房及倉儲場地租賃合同范本2篇
- 2025年度物流數(shù)據(jù)分析與挖掘服務(wù)合同4篇
- 2024美容美發(fā)連鎖加盟合同
- 2024裝飾工程承包合同書
- 2025年度物流車輛數(shù)據(jù)信息服務(wù)合同4篇
- 2024版設(shè)備銷售與服務(wù)合同
- 2025年度MCN藝人品牌合作推廣合同3篇
- 2025年河北供水有限責(zé)任公司招聘筆試參考題庫含答案解析
- Unit3 Sports and fitness Discovering Useful Structures 說課稿-2024-2025學(xué)年高中英語人教版(2019)必修第一冊
- 農(nóng)發(fā)行案防知識培訓(xùn)課件
- 社區(qū)醫(yī)療抗菌藥物分級管理方案
- NB/T 11536-2024煤礦帶壓開采底板井下注漿加固改造技術(shù)規(guī)范
- 2024年九年級上德育工作總結(jié)
- 2024年儲罐呼吸閥項目可行性研究報告
- 除氧器出水溶解氧不合格的原因有哪些
- 沖擊式機組水輪機安裝概述與流程
- 新加坡SM2數(shù)學(xué)試題
- 畢業(yè)論文-水利水電工程質(zhì)量管理
評論
0/150
提交評論