日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

《数据结构与抽象:Java语言描述(原书第4版)》一练习

發(fā)布時(shí)間:2024/4/13 java 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《数据结构与抽象:Java语言描述(原书第4版)》一练习 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本節(jié)書(shū)摘來(lái)華章計(jì)算機(jī)《數(shù)據(jù)結(jié)構(gòu)與抽象:Java語(yǔ)言描述(原書(shū)第4版)》一書(shū)中的第2章 ,[美]弗蘭克M.卡拉諾(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 羅得島大學(xué)  新英格蘭理工學(xué)院 辛運(yùn)幃 饒一梅 譯 更多章節(jié)內(nèi)容可以訪問(wèn)云棲社區(qū)“華章計(jì)算機(jī)”公眾號(hào)查看。

練習(xí)

1.為什么類ArrayBag中的方法getIndexOf和removeEntry是私有的而不是公有的?
2.為ADT包實(shí)現(xiàn)方法replace,用一個(gè)給定對(duì)象替換當(dāng)前包中的對(duì)象,并返回原始對(duì)象。
3.修改2.1.7節(jié)中給出的方法clear的定義,以便更有效率且僅調(diào)用checkInitialization方法。
4.修改2.1.7節(jié)的避免重復(fù)工作中給出的方法remove,以便從包中刪除一個(gè)隨機(jī)項(xiàng)。這個(gè)修改會(huì)影響到類ArrayBag中的其他方法嗎?
5.為類ArrayBag定義方法removeEvery,從包中刪除給定項(xiàng)的所有出現(xiàn)。
6.類ArrayBag的實(shí)例有固定大小,而ResizableArrayBag的實(shí)例則沒(méi)有。給出一些例子,如果包的大小是
a.固定的
b.可變的
則包是合適的。
7.假定想定義類PileOfBooks來(lái)實(shí)現(xiàn)前一章項(xiàng)目2中描述的接口。包是表示一堆書(shū)的合理集合嗎?解釋之。
8.考慮2.2.2節(jié)中討論的類ResizableArrayBag的實(shí)例myBag。假定myBag的初始容量是10。
a.向myBag中添加了145項(xiàng)后
b.向myBag中添加20項(xiàng)后
數(shù)組bag的長(zhǎng)度是多少?
9.在客戶層定義一個(gè)方法,其參數(shù)是類ArrayBag的實(shí)例,并返回類ResizableArrayBag的實(shí)例,其中含有與參數(shù)所給包中相同的項(xiàng)。
10.假定包中含有Comparable對(duì)象,例如字符串。一個(gè)Comparable對(duì)象屬于實(shí)現(xiàn)了標(biāo)準(zhǔn)接口Comparable的一個(gè)類,所以有方法compareTo。為類ArrayBag實(shí)現(xiàn)下列方法:

  • 返回包中最小對(duì)象的方法getMin
  • 返回包中最大對(duì)象的方法getMax
  • 刪除并返回包中最小對(duì)象的方法removeMin
  • 刪除并返回包中最大對(duì)象的方法removeMax

11.假定包中含有Comparable對(duì)象,如前一個(gè)練習(xí)中所描述的那樣。為類ArrayBag定義一個(gè)方法,返回由小于某個(gè)給定項(xiàng)的項(xiàng)組成的新包。方法的頭可以如下所示:

確保你的方法不會(huì)影響原始包的狀態(tài)。
12.為類ArrayBag定義equals方法,當(dāng)兩個(gè)包的內(nèi)容相同時(shí)返回真。注意,兩個(gè)相等的包應(yīng)含有相同個(gè)數(shù)的項(xiàng),每個(gè)項(xiàng)出現(xiàn)在每個(gè)包中的個(gè)數(shù)應(yīng)相等。每個(gè)數(shù)組中的項(xiàng)的次序是無(wú)關(guān)的。
13.類ResizableArrayBag有一個(gè)數(shù)組,當(dāng)向包中添加對(duì)象時(shí)其大小增大。修改這個(gè)類,使得當(dāng)從包中刪除對(duì)象時(shí),它的數(shù)組還可以縮小。完成這個(gè)任務(wù)需要兩個(gè)新的私有方法,如下所示:
第一個(gè)新方法檢查是否應(yīng)該減小數(shù)組的大小:

如果包中的項(xiàng)數(shù)小于數(shù)組大小的一半且數(shù)組的大小大于20,這個(gè)方法返回真。
第二個(gè)新方法創(chuàng)建一個(gè)新數(shù)組,其大小是當(dāng)前數(shù)組大小的3/4,且數(shù)組的大小大于20。

實(shí)現(xiàn)這兩個(gè)方法,然后使用它們來(lái)定義兩個(gè)remove方法。
14.考慮前一個(gè)練習(xí)中描述的兩個(gè)私有方法。

  • 方法isTooBig需要數(shù)組的大小大于20。如果沒(méi)有這個(gè)要求可能會(huì)發(fā)生什么問(wèn)題?
  • 方法reduceArray與方法doubleCapacity并不相同,它沒(méi)有讓數(shù)組的大小減小一半。如果數(shù)組的大小減到一半而不是3/4,可能會(huì)出現(xiàn)什么問(wèn)題?
    15.為類ResizableArrayBag定義前一章練習(xí)5描述的方法union。
  • 16.為類ResizableArrayBag定義前一章練習(xí)6描述的方法intersection。
    17.為類ResizableArrayBag定義前一章練習(xí)7描述的方法difference。

    項(xiàng)目

    1.設(shè)計(jì)并實(shí)現(xiàn)單人猜謎游戲,選擇n個(gè)1~m之間的隨機(jī)整數(shù),要求用戶來(lái)猜它們。同一個(gè)整數(shù)可能被選中多次。例如,游戲可能選中1~10之間的以下4個(gè)整數(shù):4,6,1,6。用戶和游戲之間的交互可能是:
    輸入你猜測(cè)的1~10之間選中的4個(gè)整數(shù):
    1 2 3 4
    你猜的2是正確的,再猜。
    輸入你猜測(cè)的1~10之間選中的4個(gè)整數(shù):
    2 4 6 8
    你猜的2是正確的,再猜。
    1 4 6 6
    正確!再玩一次?不
    再見(jiàn)!
    設(shè)計(jì)作為ADT的游戲。使用包來(lái)保存游戲選擇的整數(shù)。整數(shù)m和n由客戶指定。
    2.定義一個(gè)表示1.5節(jié)描述的集合(set)并實(shí)現(xiàn)接口的類ArraySet。在實(shí)現(xiàn)中使用類ResizableArrayBag。然后寫(xiě)一個(gè)程序,充分論證你的實(shí)現(xiàn)。
    3.重復(fù)前一個(gè)項(xiàng)目,使用可變大小的數(shù)組而不是使用類ResizableArrayBag。
    4.定義類PileOfBooks,實(shí)現(xiàn)前一章項(xiàng)目2中描述的接口。在實(shí)現(xiàn)中使用可變大小的數(shù)組。然后寫(xiě)一個(gè)程序,充分論證你的實(shí)現(xiàn)。
    5.定義類Ring,實(shí)現(xiàn)前一章項(xiàng)目3描述的接口。在實(shí)現(xiàn)中使用可變大小的數(shù)組。然后寫(xiě)一個(gè)程序,充分論證你的實(shí)現(xiàn)。
    6.可以寫(xiě)一個(gè)集合或一個(gè)包,創(chuàng)建拼寫(xiě)檢查器。集合或包用作字典,且含有一組正確拼寫(xiě)的字。要看一個(gè)字是否拼寫(xiě)正確,可以看它是否含在字典中。使用這種方法對(duì)外部文件中保存的字創(chuàng)建拼寫(xiě)檢查器。為簡(jiǎn)化任務(wù),限制字典的規(guī)模。
    7.重做前一個(gè)項(xiàng)目,創(chuàng)建拼寫(xiě)檢查器,但是將你要檢查拼寫(xiě)的字放入包中。字典(含有正確拼寫(xiě)字的集合或包)與要檢查的字的包之間的差,是拼寫(xiě)錯(cuò)誤的字的包。
    自測(cè)題答案
    1.學(xué)生仍然在連續(xù)編號(hào)的椅子上。不需要記錄空椅子的位置。
    2.不移動(dòng)學(xué)生從而節(jié)省時(shí)間。
    3.最大編號(hào)椅子中的學(xué)生。
    4.不相等。僅當(dāng)包滿時(shí)兩個(gè)值才相等。
    5.如果客戶含有如下的一條語(yǔ)句

    則myBag.getCurrentSize()將是數(shù)組bagContents中項(xiàng)的個(gè)數(shù)。根據(jù)設(shè)計(jì),bagContents.length可以大于包中項(xiàng)的個(gè)數(shù)。
    6.該語(yǔ)句將包的第一個(gè)元素設(shè)置為null。numberOfEntries的值不改變,所以它是5。
    7.

    8.包aBag為空。當(dāng)調(diào)用displayBag時(shí),執(zhí)行語(yǔ)句

    當(dāng)調(diào)用toArray時(shí),執(zhí)行語(yǔ)句

    因?yàn)閍Bag為空,所以numberOfEntries是0。因此新數(shù)組result是空的。跳過(guò)toArray中的循環(huán),返回空數(shù)組且賦給bagArray。因?yàn)閎agArray.length是0,所以跳過(guò)displayBag中的循環(huán)。調(diào)用displayBag(aBag)的結(jié)果是簡(jiǎn)單的一行:

    9.優(yōu)點(diǎn):這個(gè)定義易寫(xiě),所以可能少犯錯(cuò)誤。
    缺點(diǎn):這個(gè)定義要花更多的執(zhí)行時(shí)間,如果anEntry在包中出現(xiàn)多次時(shí)。注意,方法getFrequencyOf中的循環(huán)對(duì)包中的所有項(xiàng)重復(fù),而2.1.6節(jié)中所給的方法contains中的循環(huán)一旦找到所需的項(xiàng)立即結(jié)束。
    10.

    11.雖然對(duì)于客戶的方法和ArrayBag中的其他方法,包會(huì)變?yōu)榭盏?#xff0c;但被刪除對(duì)象的引用仍保留在數(shù)組bag中。即使客戶不保留指向這些對(duì)象的引用,與它們相關(guān)的內(nèi)存也沒(méi)被釋放。
    12.設(shè)置bag[numberOfEntries]為null,該方法使得分配給被刪項(xiàng)的內(nèi)存被回收,除非客戶還有另一個(gè)指向這個(gè)項(xiàng)的引用。
    13.數(shù)組bag中不是最后一項(xiàng)的項(xiàng)設(shè)置為null。其余的項(xiàng)不再位于數(shù)組的連續(xù)元素中。可以重新安排項(xiàng)來(lái)去掉null項(xiàng),或者修改其他方法跳過(guò)null項(xiàng)。

  • a.不能。如果result是null(且這十分可能),則將出現(xiàn)NullPointerException。
    b.能。
  • 15.在包中找到"B"后,remove方法將它替換為數(shù)組bag中的最后項(xiàng),即"C"。然后將最后項(xiàng)替換為null。雖然可以定義remove來(lái)得到問(wèn)題中所給出的兩個(gè)其他可能的結(jié)果,但每個(gè)結(jié)果都是不好的。例如,要得到"A","A","A","C",null,remove應(yīng)該移動(dòng)數(shù)組元素,需要更多的運(yùn)行時(shí)間。在數(shù)組中留下空隙,如"A","A",null,"A","C",對(duì)remove來(lái)說(shuō)容易辦到,但對(duì)其他方法邏輯就復(fù)雜了。
    16.

    17.

    或者

    18.
    或者

    19.

    20.

    21.簡(jiǎn)單的賦值語(yǔ)句可能不是好的選擇,因?yàn)榭蛻艨赡苁褂弥赶蜃鳛閰?shù)傳給構(gòu)造方法的數(shù)組的引用來(lái)破壞包的數(shù)據(jù)。復(fù)制參數(shù)數(shù)組到數(shù)組bag中是必需的,以保護(hù)包數(shù)據(jù)的完整性。
    22.優(yōu)點(diǎn):如果你知道下標(biāo),可以直接訪問(wèn)任意數(shù)組位置。
    缺點(diǎn):數(shù)組有固定的大小,所以或者浪費(fèi)空間或者超界。調(diào)整數(shù)組大小可以避免后一個(gè)缺點(diǎn),但需要將原始數(shù)組的內(nèi)容復(fù)制到更大的數(shù)組中。

    總結(jié)

    以上是生活随笔為你收集整理的《数据结构与抽象:Java语言描述(原书第4版)》一练习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日本一区二区三区视频在线播放 | 奇米色在线 | 欧美在线中文 | 久久青青草视频 | www.四虎在线观看 | 天天玩天天干 | av中文字幕免费观看 | 欧美 日韩 人妻 高清 中文 | 青青青手机视频在线观看 | 嫩草嫩草嫩草嫩草嫩草 | 婷婷综合av | 色噜噜影院 | 熟女av一区二区三区 | 久久久久久久久久综合 | 97在线视频人妻无码 | 欧美日本国产在线 | 嫩草影院黄色 | 国产视频一区二区三区四区 | 欧美xxxx喷水 | 99久久网站 | 男男成人高潮片免费网站 | 国产激情久久久久 | 黄色一级一片 | 欧洲国产视频 | 国产免费又粗又猛又爽 | 午夜在线观看一区 | 欧美三级视频在线播放 | 正在播放久久 | 色欧洲| 国产一级片av | 欧美女优一区二区 | 风流还珠之乱淫h文 | 精品国产成人亚洲午夜福利 | 性欧美精品中出 | 日韩八区 | 日韩不卡在线视频 | 国产av无码专区亚洲a∨毛片 | 福利电影在线播放 | 国产精品77 | 69视频一区二区 | 日本女人毛茸茸 | 国产欧美一区二区三区在线看蜜臀 | av毛片在线播放 | 在线黄色观看 | 一级啪啪片 | 日日天天 | 成人av片在线观看 | 先锋av资源网站 | 波多野结衣一区二区三区免费视频 | 在线免费观看视频你懂的 | 欧美日韩视频在线观看一区 | 亚洲综合久久网 | 久久二区三区 | 亚洲精品福利网站 | 欧美日韩中文国产一区发布 | 国产熟女一区二区丰满 | 在线免费视频一区 | 黄色一级免费网站 | 91一区| 新97超碰| 视频在线一区二区 | 亚洲欧美激情小说另类 | 影音先锋黄色网址 | 日韩aⅴ视频 | 波多野结衣视频免费看 | 美女扒开腿让人桶爽原神 | 无码国产色欲xxxx视频 | 中文字幕8 | 日韩欧美视频一区二区三区 | 依人综合网 | 亚洲欧美在线播放 | 国产精品99久久久久久大便 | 国产高潮久久久 | 18禁免费无码无遮挡不卡网站 | 黄色三级在线播放 | 波多野结衣电影免费观看 | 欧美色呦呦 | 一级视频在线播放 | 亚洲美女在线观看 | 美女尻逼视频 | 久久女人网 | 亚洲v欧美v另类v综合v日韩v | 波多野结衣激情视频 | 日日噜噜夜夜狠狠久久丁香五月 | 医生强烈淫药h调教小说视频 | 一级免费在线观看 | 免费黄色高清视频 | 最新av免费在线观看 | 国产成人在线影院 | 91中文| 黄网在线| 亚洲av无码一区二区三区人 | 中文字幕欧美人妻精品一区蜜臀 | 国产黄视频在线观看 | 夜夜夜操操操 | 99精品欧美一区二区三区 | 久久伊人五月天 | 久久有精品 | 有码在线 |