數(shù)據(jù)結(jié)構(gòu)查找表_第1頁
數(shù)據(jù)結(jié)構(gòu)查找表_第2頁
數(shù)據(jù)結(jié)構(gòu)查找表_第3頁
數(shù)據(jù)結(jié)構(gòu)查找表_第4頁
數(shù)據(jù)結(jié)構(gòu)查找表_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第九章查找

概述查找表——數(shù)據(jù)結(jié)構(gòu)同各種線性或非線性的數(shù)據(jù)結(jié)構(gòu)一樣,查找表也是一種在實(shí)際應(yīng)用中大量使用的數(shù)據(jù)結(jié)構(gòu)。查找表(SearchTable)是由同一類型的數(shù)據(jù)元素構(gòu)成的集合,集合中的數(shù)據(jù)元素之間存在著完全松散的關(guān)系。因此查找表是一種非常靈活的數(shù)據(jù)結(jié)構(gòu)。靜態(tài)查找表和動(dòng)態(tài)查找表對(duì)查找表的常見操作:(1)查詢某個(gè)“特定的”數(shù)據(jù)元素是否在查找表中;(2)檢索某個(gè)“特定的”數(shù)據(jù)元素的各種屬性;(3)在查找表中插入一個(gè)數(shù)據(jù)元素;(4)從查找表中刪除某個(gè)數(shù)據(jù)元素。靜態(tài)查找表(StaticSearchTable),只對(duì)查找表作前兩種“查找”操作;動(dòng)態(tài)查找表(DynamicSearchTable),若在查找過程中同時(shí)插入查找表中不存在的數(shù)據(jù)元素,或者從查找表中刪除已存在的某個(gè)數(shù)據(jù)元素,則此類查找表即為動(dòng)態(tài)查找表。查找關(guān)鍵字,數(shù)據(jù)元素中某個(gè)數(shù)據(jù)項(xiàng)的值,用它可以標(biāo)識(shí)一個(gè)數(shù)據(jù)元素。若它可以唯一標(biāo)識(shí)一個(gè)數(shù)據(jù)元素,則稱此關(guān)鍵字為主關(guān)鍵字(PrimaryKey)(對(duì)不同的記錄,其主關(guān)鍵字均不同)。反之,用以識(shí)別若干數(shù)據(jù)元素的關(guān)鍵字為次關(guān)鍵字(SecondaryKey)。查找(Searching),根據(jù)給定的某個(gè)值,在查找表中確定一個(gè)其關(guān)鍵字等于給定值的數(shù)據(jù)元素。若表中存在這樣的一個(gè)記錄,則查找成功,查找的結(jié)果為給出整個(gè)記錄的信息,或指示該記錄的查找表中的位置;若表中不存在關(guān)鍵字等于給定值的記錄,則稱查找不成功,查找結(jié)果可以給出一個(gè)“空”記錄或“空”指針。例子準(zhǔn)考證號(hào)姓名各科成績(jī)總分政治語文外語數(shù)學(xué)物理化學(xué)生物01章三85868810092904558602蘆花78759080958837543查找表關(guān)鍵字(主/次)查找成功/查找失敗例子電話號(hào)碼簿中查閱電話字典中查閱某個(gè)詞編譯程序中符號(hào)表信息處理系統(tǒng)中的信息表如何進(jìn)行查找在一個(gè)結(jié)構(gòu)中查找某個(gè)數(shù)據(jù)元素的過程,依賴于數(shù)據(jù)元素在結(jié)構(gòu)中的地位,即依賴于數(shù)據(jù)元素的組織關(guān)系(人為的)。在計(jì)算機(jī)中進(jìn)行查找的方法隨數(shù)據(jù)結(jié)構(gòu)不同而不同。

即隨查找表的不同而不同。9.1靜態(tài)查找表查找表的結(jié)構(gòu)查找過程描述查找性能分析查找方法比較順序表的查找有序表的查找靜態(tài)樹表的查找靜態(tài)側(cè)查找君表的抽董象數(shù)遠(yuǎn)據(jù)類遼型P21裝69.南1.敬1順序鑰表的傅查找查找船表用一靠般的順序叛表或者線性像鏈表來表盟示靜替態(tài)查藏找表下。順序趴查找(S伯eq緊ue郊nt灶ia鏡l移Se熱ar滲ch往)從表久中最后添一個(gè)線記錄開始噴,逐耐個(gè)進(jìn)津行記優(yōu)錄的朵關(guān)鍵凡字和換給定榜值的比較,若午某個(gè)炕記錄萬的關(guān)依鍵字遠(yuǎn)和給年定值很比較青相等故,則查找慢成功,返許回該地記錄光在查沫找表嘴中的負(fù)位序誓;反慕之,四若直偏至第一題個(gè)記疤錄,其旅關(guān)鍵紅字和陜給定燥值比不較都轉(zhuǎn)不相凝等,扭則表詞中無罵此記租錄,查找登失敗權(quán),返陜回0。in掙tSe鑒ar剩ch攏_S蓋eq塞(S霸ST踢ab拳leST,Ke令yT班yp須eke裙y剃){提ST占.e衣le疲m[尼0]芒.k造ey隆=演k順ey登;//監(jiān)視由哨fo沾r(兵i鑄=汽S部T.慶le滾ng和th萄;龍!興E模Q(ST躲.e捷le艱m[白i]伯.k恐ey,連ke辯y剖)敵;蒜-閘-i撲);撕re程tu遺rn批i刷;//找不咽到時(shí)必,i為0}查找怕性能掙分析以其關(guān)鍵使字和態(tài)給定腎值進(jìn)然行過男比較形的記姑錄個(gè)宿數(shù)的涌平均庭值作為娘衡量緊查找淘算法鞋好壞城的依騾據(jù)。定義袋:為率確定顛記錄雕在查遇找表甚中的坊位置逐,需聯(lián)和給穩(wěn)定值靈進(jìn)行特比較往的關(guān)捏鍵字鈴個(gè)數(shù)堵的期帽望值均稱為捐查找蜂算法揭在查找拿成功時(shí)的平均吵查找言長(zhǎng)度飾(Av殿er曾ag挽e舊Se龜ar灶chLe吹ng娃th宇e)。查找倦成功時(shí)的華平均炊查找妖長(zhǎng)度AS朱L對(duì)于含有n個(gè)記錄的查找表,查找成功時(shí)的平均查找長(zhǎng)度為

Pi為查找表中第i個(gè)記錄被查找的概率,Ci為找到爹表中莫其關(guān)盤鍵字?jǐn)_與給拆定值丸相等盡的第i個(gè)記桐錄時(shí)滑,和浸給定蔬值已館經(jīng)進(jìn)其行過軟比較鏡的關(guān)性鍵字桿個(gè)數(shù)吸。Ci隨查找例過程艇不同械而不攻同。在順為序查每找的擴(kuò)過程計(jì)中,Ci取決優(yōu)于所輕查記色錄在顏表中旬的位追置,眼有Ci=轟n晌–即i切+1。順序仗查找至的平煩均查己找長(zhǎng)辮度在等寬概率叔的情風(fēng)況下稠:在概返率不販等的協(xié)情況扔下:P21塵8查找皂不成交功時(shí)的AS優(yōu)L當(dāng)查切找不增成功肢的情壯形不訪能忽爭(zhēng)視時(shí),查孤找算煌法的沫平均踩查找盈長(zhǎng)度改應(yīng)該懲是查說找成處功時(shí)套的平鐮均查富找長(zhǎng)志度與調(diào)查找偉不成協(xié)功時(shí)軍的平鞠均查挖找長(zhǎng)鴨度之渠和。對(duì)于襪順序嗎查找申表而系言,景若假海設(shè)查師找成裕功與正查找揉不成膝功的終可能揭性相慣同,諷則每豆個(gè)記躺錄的俗查找比概率抬相等Pi=1乓/2肯n,則有?。喉樞蛐伪淼脑鼉?yōu)缺科點(diǎn):缺點(diǎn)阿:平劍均查捷找長(zhǎng)喝度較賣大,敏特別倦是當(dāng)n很大職時(shí),讀查找呢效率裕較低繞。優(yōu)點(diǎn)邊:算精法簡(jiǎn)守單,午適用蕉面廣澤。它稿對(duì)表蜂結(jié)構(gòu)跳無任哥何要斤求,拌無論持記錄趟是否立按關(guān)皮鍵字預(yù)有序昂均可惹。并菜且以亮上討腿論對(duì)憶于線性屬鏈表同樣繞適用吃。9.勿1.趟2有序路表的催查找查找佛表當(dāng)靜盲態(tài)查侍找表煤是有序抬表(順該序表況)折半妥查找(B舅in曾ar晝y購S涂ea極rc瓣h)例如奶,已舞知有戶如下11個(gè)數(shù)淡據(jù)元掘素的呈有序穿表(意關(guān)鍵攤字即儲(chǔ)為數(shù)每據(jù)元森素的占值):峰(蛙05滑,敞13畜,首19斥,珍21棒,告37訓(xùn),跌56析,賺64掘,曠75揭,卻80干,傅88免,駝92憂)?,F(xiàn)在貿(mào)要求嫩查找模關(guān)鍵夕字為21和85的數(shù)貴據(jù)元聯(lián)素。0513192137566475808892lowhighmidlowhigh例子給定昏值ke愧y休=扶21的查黃找過岔程:給定薦值ke劍y終=潔85的查咐找過美程:下界lo楊w>上界hi槐gh,查找啞不成咱功。in燒tSe踐ar抖ch稼_B憂in厲(SS銳Ta槐bl撥eST,Ke將yT已yp析eke扶y礎(chǔ)){尖l能ow旺=焰1拜;題h虧ig壓h油=靜ST坊.l震en龜gt跪h;抹w瘡hi價(jià)le叮(研l(wèi)o解w惑<=補(bǔ)h隙ig鞭h發(fā)){落mi濁d叮=混(杰lo糾w壤+政hi扒gh匯)鉗/撓2;權(quán)if槳EQ隱(覆ke師y訊,ST鍛.e板le右m[禍mi長(zhǎng)d]驢.k遙ey)賤r芽et鋸ur遺n助m輕id裂;幕e臭ls脅e察i疫f膜L露T(息k疤ey垂,ST完.e員le茫m[岔mi敏d]銳.k秘ey)紛hi私gh訴=濃m朗id崇-1難;滋e蜘ls麗e淚l撓ow蝦=普m露id暈+滿1;凝}敏r剝et役ur暗n聲0居;騙}折半掏查找朽性能退分析折半胸查找證的判江定樹樹中匯每個(gè)練結(jié)點(diǎn)種表示顛表中強(qiáng)的一茄個(gè)記牙錄,雷結(jié)點(diǎn)竿中的像值為伐該記孔錄在限表中咳的位置。這或樣一販棵二風(fēng)叉樹王可以渠用來觀描述腫折半孕查找?guī)胚^程錦。6391427108115-11-23-42-34-55-67-88-96-710-1111-9-10折半近查找享性能微分析折半純查找龜查找地成功卵的過球程就伙是走了加一條客從根散結(jié)點(diǎn)拜到與喝該記園錄相待應(yīng)的貍結(jié)點(diǎn)楊的路莫徑,與院給定悼值進(jìn)謎行比僅較的奶關(guān)鍵腳字個(gè)鏟數(shù)恰解為該躍結(jié)點(diǎn)膽在判傘定樹勇上的柏層次逃數(shù)。折半配查找執(zhí)查找攝失敗蓋的過勸程,就是猾走了填一條咳從根摟結(jié)點(diǎn)額到外義部結(jié)紋點(diǎn)的鍋路徑,和豬給定旋值進(jìn)話行比鼻較的誕關(guān)鍵品字個(gè)年數(shù)等纖于該路錄徑上法內(nèi)部仿結(jié)點(diǎn)背個(gè)數(shù)。因此借,折冊(cè)半查孝找法候在查鴿找成親功時(shí)辭進(jìn)行辜比較及的關(guān)邁鍵字?jǐn)噦€(gè)數(shù)最扛多不略超過功樹的廈深度扒,吧在查慣找不很成功撐時(shí)和給定滅值進(jìn)怨行比父較的譽(yù)關(guān)鍵網(wǎng)字個(gè)什數(shù)最熄多也浪不超陳過折半榜查找部的AS濱L假設(shè)批有序洲表的著長(zhǎng)度饞為n=哲2h-1,則描爸述折濱半查綱找的類判定赤樹是至深度浸為h的滿夜二叉嶼樹。該樹像中層頑次為1的結(jié)下點(diǎn)有1個(gè),聾層次宵為2的結(jié)途點(diǎn)有2個(gè),…,層別次為h的結(jié)佳點(diǎn)有2h-誦1個(gè)。假設(shè)撒有序攪表中芝每個(gè)爬記錄茄的查季找概清率相境等(Pi=泛1/匯n)。折半階查找汁的優(yōu)茂缺點(diǎn)優(yōu)點(diǎn)底:效毅率比焦順序蒙查找賄高;缺點(diǎn)沾:只際適用暴于有稀序表坡,且詞限于往順序撤存儲(chǔ)度結(jié)構(gòu)緒,對(duì)縫線性梢鏈表揀無法噸進(jìn)行怪折半驢查找轉(zhuǎn)。9.網(wǎng)1.出3靜態(tài)相樹表竟的查韻找當(dāng)有劣序表?xiàng)椫懈麈I記錄齡的查農(nóng)找概華率不鑄相等爪時(shí),油單純趁的折長(zhǎng)半查她找的芒效率匙并不侄是最期高的構(gòu)造營(yíng)一個(gè)拜靜態(tài)聚最優(yōu)平查找擠樹,癢這樣室的二衫叉樹威的查頓找性扒能才執(zhí)是最是佳的9.雄1.驅(qū)4索引亦順序反表的齊查找查找醬表——以索引憑順序底表表示券靜態(tài)彩查找榴表,曲則Se授ar阿ch函數(shù)友用分塊像查找來實(shí)醬現(xiàn)。器因此條,分螺塊查鹽找又舌稱索引料順序揪查找,是樣順序趴查找灘的一叉種改駁進(jìn)。53864974586048243844423320981312221817161514131211109876543211221378648索引訊表最大媽關(guān)鍵杰字起始柱地址索引輕表按夢(mèng)關(guān)鍵熟字有蒼序,則吊表或芳者有泛序,錄或者增分塊印有序信。分塊甜查找(索引悼順序廳表查丈找)分塊梳查找國(guó)的步捆驟分最為兩測(cè)步:愉先確蜓定待概查記港錄所梢在的規(guī)塊(貢子表膀);心然后截在塊刷中順墳序查講找。例子畝,在建上述難索引詢順序也表中碰查找38和39。53864974586048243844423320981312221817161514131211109876543211221378648注意媽:由拋于索與引項(xiàng)脹組成內(nèi)的索理引表誤按關(guān)政鍵字騾有序千,則確定祝塊的損查找賠可以御用順嘗序查骨找,炎也可闊以用投折半冬查找;而咳塊中氏的記娘錄排唯列是魯任意專的,涉則在塊中胡只能渠是順型序查話找。分塊查塊找的抗平均斧查找蔥長(zhǎng)度分塊凝查找背的平終均查仁找長(zhǎng)敗度為AS間Lbs=渾Lb+Lw其中系:Lb為查找索引礙表確定專所在申塊的術(shù)平均剝查找默長(zhǎng)度虛,Lw為在塊蹦中查找脈元素?cái)y的平喇均查補(bǔ)找長(zhǎng)趟度。分塊汁查找料的平餃均查倆找長(zhǎng)毯度若采牙用順序液查找肝塊,則雁分塊顫查找鳴的平蹈均查每找長(zhǎng)櫻度為老:其中,n為表長(zhǎng),均勻分為b塊,每塊含有s個(gè)記錄,即b=若采骨用折半歲查找后塊,則旦分塊幟查找褲的平接均查罰找長(zhǎng)西度為揚(yáng):順序查找塊的平均查找長(zhǎng)度不僅和表長(zhǎng)n有關(guān),而且和每一塊中的記錄個(gè)數(shù)s有關(guān)??梢姙榱颂岣卟檎倚?,在n確定的情況下,應(yīng)該選擇合適的s。容易證明,當(dāng)s取時(shí),ASLbs取最小值9.莫2動(dòng)態(tài)享查找翼表動(dòng)態(tài)表查找毒表的AD串T動(dòng)態(tài)棍查找陳表的社特點(diǎn)萍是,表結(jié)絲式構(gòu)本賞身是早在查為找過策程中案動(dòng)態(tài)國(guó)生成掏的。即抱,對(duì)么于給尖定值ke寒y,若表孩中存慎在其包關(guān)鍵籃字等揭于ke外y的記撐錄,性則查沾找成派功返腳回;否則踢,插軟入關(guān)鍵預(yù)字等扣于ke恒y的記簡(jiǎn)錄。P22既6:Se稻ar顛ch浩DS行Ta略bl時(shí)e(搜DT,ke微y咐);In煤se筍rt穿DS弊Ta紋bl尤e(饅&D欠T,e賴);De爐le津te嬸DS富Ta澡bl賢e(懼&D必T,描e伙);9.倒2.畏1二叉?zhèn)渑判蛑笜洳檎彝け怼鎱^(qū)排序寒樹二叉殲排序篩樹(B囑in貍ar檔y坑So章rt采T謀re踢e)或者陵是一惡棵空蘆樹;爐或者舌是具父有下低列性脹質(zhì)的喘二叉狼樹:袖(1察)若它汽的左烏子樹國(guó)不空箏,則桐左子枕樹上復(fù)所有捎結(jié)點(diǎn)宏的值偽均小于它的肯根結(jié)陣點(diǎn)的帳值;(2動(dòng))若它裙的右金子樹拿不空伸,則直右子現(xiàn)樹上雹所有幟結(jié)點(diǎn)赤的值租均大于它的逝根結(jié)傅點(diǎn)的蓋值;(3更)它的政左、傲右子喜樹也兇分別莖為二雪叉排怠序樹折。351545504025102030二叉橡排序斤樹的份查找抗過程當(dāng)二叉裳排序析樹不墊空時(shí)脈,首低先將娘給定畢值和根結(jié)烈點(diǎn)的關(guān)揀鍵字香比較殿,若目相等檢,則蹲查找渠成功單;否托則將魯依據(jù)揉給定漠值和烏根結(jié)字點(diǎn)的倒關(guān)鍵逗字之軋間的茫大小駐關(guān)系斷,分它別在爸左子陽樹或議右子節(jié)樹上師繼續(xù)勞進(jìn)行磁查找榴。BiTreeSearchBST(BiTreeT,KeyTypekey){

//在根指針為T所指的二叉排序樹中遞歸的查找某個(gè)關(guān)鍵字等于key的

//數(shù)據(jù)元素;若查找成功,則返回指向該數(shù)據(jù)元素結(jié)點(diǎn)的指針,否則返

//回空指針。

if((!T)||EQ(key,T->data))return(T);//查找結(jié)束,成功,失敗

elseifLT(key,T->data.key)return(SearchBST(T->lchild,key);

elsereturn(SearchBST(T->rchild,key));

}算法9.5(a)在下役列二羨叉排薄序中蘋查找跪關(guān)鍵飄字等爬于10疊0的記翠錄在下移列二朝叉排疏序中陶查找甘關(guān)鍵呆字等斥于40的記白錄45125333710024615312?二叉暑排序挎樹的刺插入二叉速排序乘樹是塌一種動(dòng)態(tài)五查找剝表,其澇特點(diǎn)此在于表結(jié)給構(gòu)本環(huán)身是宵在查慮找過涉程中耽動(dòng)態(tài)絕生成界的。當(dāng)撓樹中疤不存炸在關(guān)徐鍵字疑等于某給定幕值的猴結(jié)點(diǎn)揮時(shí)再胡進(jìn)行回插入廉。新插季入的老結(jié)點(diǎn)輝一定百是一融個(gè)新售添加壓的葉子百結(jié)點(diǎn),并納且是查找標(biāo)不成君功時(shí)暫查找怖路徑上訪殺問的杰最后覆一個(gè)宣結(jié)點(diǎn)醒的左牌孩子峽或右圖孩子雕結(jié)點(diǎn)。算法9.壁5(雀b)玻:在根膀指針訊為T所指劇的二街叉排遇序樹魚中遞歸的查應(yīng)找某構(gòu)個(gè)關(guān)卡鍵字脹等于ke陡y的數(shù)躲據(jù)元原素。脖若查破找成片功,辣則指袋針p指向收該數(shù)算據(jù)元茶素結(jié)玻點(diǎn),缸并返億回TR飄UE;否則域,指結(jié)針p指向京查找吩路徑靠上訪遇問的填最后漫一個(gè)朱結(jié)點(diǎn)澆,并究返回FA襯LS紛E。算法9.逼6:當(dāng)二乒叉樹T中不嫂存在槍關(guān)鍵堡字等旺于e.賀ke干y的數(shù)順據(jù)元雙素時(shí)炒,插固入e并返百回TR穗U(xiǎn)E,否則謙返回FA崇LS綠E。待查土找的勞關(guān)鍵剩字序咬列為{4博5,亞2蹲4,舉5珍3,挑4歪5,厭1享2,吃2償4,換9培0濾}454524452453452453124524531290注意吳:中序攀遍歷紛二叉眠排序恭樹可捕以得夕到一夕個(gè)關(guān)搞鍵字召的有旬序序掉列。一個(gè)之無序巡壽的序腰列可希以通改過構(gòu)揚(yáng)造一兔棵二裹叉排育序樹慮而變劫成一凝個(gè)有康序序絨列,構(gòu)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論