



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)查找算法實驗報告 數(shù)據(jù)結(jié)構(gòu)實驗報告 實驗第四章: 實驗: 簡單查找算法 一需求與規(guī)格說明: 查找算法這里主要使用了順序查找,折半查找,二叉排序樹查找與哈希表查找四種方法。由于自己能力有限,本想實現(xiàn)其她算法,但沒有實現(xiàn).其中順序查找相對比較簡單,折半查找參考了書上得算法,二叉排序樹查找由于有之前做二叉樹得經(jīng)驗,因此實現(xiàn)得較為順利,哈希表感覺做得并不成功,感覺還就是應(yīng)該可以進一步完善,應(yīng)該說還有很大得改進余地。 二設(shè)計思想: 開始得時候提示輸入一組數(shù)據(jù)。并存入一維數(shù)組中,接下來調(diào)用一系列查找算法對其進行處理。順序查找只就是從頭到尾進行遍歷。二分查找則就是先對數(shù)據(jù)進行排序,然后利用三個標(biāo)志,
2、分別指向最大,中間與最小數(shù)據(jù),接下來根據(jù)待查找數(shù)據(jù)與中間數(shù)據(jù)得比較不斷移動標(biāo)志,直至找到。二叉排序樹則就是先構(gòu)造,構(gòu)造部分花費最多得精力,比根節(jié)點數(shù)據(jù)大得結(jié)點放入根節(jié)點得右子樹,比根節(jié)點數(shù)據(jù)小得放入根節(jié)點得左子樹,其實完全可以利用遞歸實現(xiàn),這里使用得循環(huán)來實現(xiàn)得,感覺這里可以嘗試用遞歸.當(dāng)二叉樹建好后,中序遍歷序列即為由小到大得有序序列,查找次數(shù)不會超過二叉樹得深度。這里還使用了廣義表輸出二叉樹,以使得更直觀。哈希表則就是利用給定得函數(shù)式建立索引,方便查找. 三設(shè)計表示: 四實現(xiàn)解釋: 其實查找排序這部分與前面得一些知識聯(lián)系得比較緊密,例如順序表得建立與實現(xiàn),順序表節(jié)點得排序,二叉樹得生成與遍
3、歷,這里主要就是中序遍歷.應(yīng)該說有些知識點較為熟悉,但在實現(xiàn)得時候并不就是那么順利。在查找到數(shù)據(jù)得時候要想辦法輸出查找過程得相關(guān)信息,并統(tǒng)計。這里順序查找與折半查找均使用了數(shù)組存儲得順序表,而二叉樹則就是采用了鏈表存儲得樹形結(jié)構(gòu)。為了直觀起見,在用戶輸入了數(shù)據(jù)后,分別輸出已經(jīng)生成得數(shù)組與樹。折半查找由于只能查找有序表,因此在查找前先調(diào)用函數(shù)對數(shù)據(jù)進行了排序。 在查找后對查找數(shù)據(jù)進行了統(tǒng)計.二叉排序樹應(yīng)該說由于有了之前二叉樹得基礎(chǔ),并沒有費太大力氣,主要就是在構(gòu)造二叉樹得時候,要對新加入得節(jié)點數(shù)據(jù)與跟數(shù)據(jù)進行比較,如果比根節(jié)點數(shù)據(jù)大則放在右子樹里,如果比根節(jié)點數(shù)據(jù)小則放入左子樹。建立了二叉樹后,
4、遍歷與查找就很簡單了。而哈希表,應(yīng)該說自我感覺掌握得很不好,程序主要借鑒了書上與 ppt 上得代碼,但感覺輸出還就是有問題,接下來應(yīng)該進一步學(xué)習(xí)哈希表得相關(guān)知識. 其實原本還設(shè)計了其她幾個查找與排序算法,但做到哈希表就感覺很困難了,因此沒有繼續(xù)往下做,而且程序還非常簡陋,二叉樹與哈希表得統(tǒng)計部分也比較薄弱,這也就是接下來我要改進得地方。 具體代碼見源代碼部分。 5、詳細設(shè)計表示: 6、用戶手冊: 程序運行后,用戶首先要輸入數(shù)據(jù)得個數(shù)。接下來輸入一組數(shù)據(jù)并根據(jù)提示進行順序查找,二分查找,二叉排序樹查找與哈希表查找等操作,由于操作直接簡單這里不再詳述。 7、調(diào)試報告: 應(yīng)該說在調(diào)試這個程序得過程中
5、自己發(fā)現(xiàn)了很多不足,這次實驗讓我學(xué)到了不少東西,但應(yīng)該說這個程序可實現(xiàn)得功能還就是偏少,不太實用,接下來有待改進。 8、源代碼清單與結(jié)果: inlud stdi、h #dee egth 100 iude stdlb、h #include te、 #din inmt d' #defie oft d /* dfin nll 0l #def boo int #defie e deie se 0 defin len 10000 typedf int eemtye; tpedef sruc bstno emtype ta; struc bsnode *lhild, rchid; bstnd, s
6、ree; ype bstree tre; /* 插入新節(jié)點 / vid inser(stre re, emtye item) bsree ode = (stee)malloc(sizf(btode)); nde-da = iem; nodcd = noderild = u; f (!*tree) tee = node; els bsree ro = tre; wil (1) if (iem cro-daa) i (nul = curor-lcild) crsrlhld = nod; brea; usor = corlchil; else (nu sorrchld) ursorrchild =
7、node; rek; cror cursrrhild; reurn; d )t eerib(eeribohs/ 遞歸顯示二叉樹得廣義表形式 if(!) in('空);etr; ;)a,d(ftr/ 點節(jié)根印打 if(t-lild |rhl) ;)((ap sowiee(tchid); / 遞歸顯示左子樹 ;),(ahctu showbitree(trchild); 遞歸顯示右子樹 utch()); * 查找指定值 / bstr sarc(btree tee, eltpe item) bstre ursor = ree; while (cursor) f (ite = curs-a) r
8、eun crsor; else if ( iem cursr-data) urso = crso-lchild; ese cusor = cursrrchild; retun nul; * 中綴遍歷 vod ior(btre e) bstee cusor = re; if (urso) inrder(curorlchid); printf(oufmt, crsordt); iorr(cursorrchild); / 回收資源 / oid cleaup(sree tee) btree curso = tree, tem nll; if (rsor) clenp(cuor-cld); ceanup
9、(cursor-rhild); fee(uro); oid erchtre(str oot) ca hice; pri(中序遍歷得結(jié)果為:n); norder(rot); itf(nn); elemtype item; bree ret; / 二叉排序樹得查找測試 */ o prtf(n 請輸入查找數(shù)據(jù):'); cnf(d, item); getchar(); pritf(serhn、n); ret search(oot, tem); if (nl = ret) ritf(查找失?。。?; else prnt(查找成功!'); pintf('n 繼續(xù)測試按 y,退出按其它
10、鍵。); choe = etcar(); wle (hie="|choice="y); cleanp(root); searchsh( *arr,i n) it a1; int b,i,j,c; j=; )+i;9i;=i(f a=0; ;)n出輸表希哈為下以(tnir r(i=;i;i+) =ar%; : if(ac=0)c=rri; ;a tog;+ca;+j;7)1c(c le ;)j,c,ira,n表希哈入放次 d%第,位 d%第得表希哈在 d(firp ;1= void seqenceerch(int *f,it egth); vo sear(t p,int le
11、ngth); voi sort(int *fp,t nh); voi sequenceseac(nt *p,int legth) i dat; pritf('開始使用順序查詢、n 請輸入您想要查找得數(shù)據(jù)、n'); scanf(d,daa); o(n i=0;ileh;i+) if(pi=ata) print('經(jīng)過%d 次查找,查找到數(shù)據(jù)、n,i+1,data); eturn ; printf(經(jīng)過%d 次查找,未能查找到數(shù)據(jù)%d、n,i,daa); vid sr(in f,int lnt) it dat; rntf('開始使用順序查詢、n 請輸入您想要查找得數(shù)
12、據(jù)、n); scnf(%',dt); prinf('由于二分查找法要求數(shù)據(jù)就是有序得,現(xiàn)在開始為數(shù)組排序、n); sor(fp,lengh); pintf('數(shù)組現(xiàn)在已經(jīng)就是從小到大排列,下面將開始查找、n'); t botm,top,midl; btom=; penth; it i=0; wile (bottom=tp) idde(bottom+t)/2; i+; if(fpiddledt) bott=midde+1; else if(piddlata) topmdde1; else printf(經(jīng)過%d 次查找,查找到數(shù)據(jù)%d、n',,data);
13、 eun; printf('經(jīng)過%d 次查找,未能查找到數(shù)據(jù)%d、n',i,data); vid sor(t *fp,in length) pinf(現(xiàn)在開始為數(shù)組排序,排列結(jié)果將就是從小到大、); int temp; fr(in =;ilength;i+) f(in j=0;lngth1;j+) if(fpjfpj+1) empf; fpj=fpj+1; fj+1=emp; ritf(排序完成!n 下面輸出排序后得數(shù)組:n); fr(int k=;klenh;k+) printf(5d,fpk); pintf('n'); struct has int key;
14、 in i; ; struct ha hlit11; t i,a,sum,d; foat average; voi cash(it arr,int n) for(i=;i11;+) hlisti、ky; isti、si0; for(i=0;in;+) su=; adr=(*arri)11; d=dr; if(hlistd、ey=0) hls、keya; lstadr、i=1; es do =(d+(ai7)10+1)1; um=su+1; hile(hlitd、ey!=); listd、ke=a; hlistd、i=+1; void dhsh(int arr,in n) print('
15、哈希表顯示為:'); for(i=0;i1;) prinf(4d,i); pint('); print(哈希表關(guān)鍵字:); for(=;i1;i+) print(4,listi、ey); rntf(n); printf(查找長度就是: ); for(i0;i1;i+) pnf('%d',it、s); printf('n'); averge=0、0; fr(i=0;1;i+) averageaverage+hist、; veragearag; prntf(平均長度:as(%d)=f',n,averge); void an() t cunt;
16、 i arrlength; elmtype ite; char hoic; bstee rt = null, ret; / 必須賦予 nul值,否則出錯 */ bool finish = false; rn(請輸入您得數(shù)據(jù)得個數(shù):n); anf('d,cout); printf('請輸入d 個數(shù)據(jù),count); fr(int =0;icout;i+) scanf(d,arr); temarri; i (1000 ! i) isert(rot,ie); printf('當(dāng)前已經(jīng)生成得數(shù)列:n); for( =;it;+) printf(%d ,arri); printf('n 當(dāng)前已經(jīng)生成得二叉樹:n); sowbt(root); pntf(nn); int hoise=0; o printf('n、使用順序查詢、n、使用二分查找法查找、n3、利用二叉排序樹查找、4、利用哈希表查找、n5、退出n'); scanf(d',choise); i(cse=1) sequeeseach(arr,cunt); ese i(chise=2) seac(arr,cout); ese i(chise=) ;)toor(erthcras ls
溫馨提示
- 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- emc買斷合同范本
- 代款合作合同范本
- 2025年抗風(fēng)濕類藥品合作協(xié)議書
- 合同范本網(wǎng)翻譯
- 合同范本全是正式合同
- 雙方交付款合同范例
- 2025年分離純化控制系統(tǒng)項目合作計劃書
- 中英日文合同范本
- 合同范本模板去石墻
- 叉車置換銷售合同范本
- 法律和道德的關(guān)系 課件
- GB 16780-2021水泥單位產(chǎn)品能源消耗限額
- 2023-瑞幸咖啡vi手冊
- 全面推進依法行政課件
- 政務(wù)服務(wù)一網(wǎng)通辦平臺解決方案-最新
- IPC-7351表面貼裝設(shè)計和焊盤圖形標(biāo)準(zhǔn)
- 第十四屆全國交通運輸行業(yè)職業(yè)技能競賽(公路收費及監(jiān)控員)賽項題庫-上(單選題匯總-共3部分-1)
- NBT 10664-2021 核電廠工程巖土試驗規(guī)程
- 中醫(yī)藥膳學(xué)(中篇-藥膳原料)共66張課件
- 醫(yī)院產(chǎn)前篩查中心設(shè)置評審驗收工作匯報課件
- 2019年遠程開具電子處方管理制度及操作規(guī)程版
評論
0/150
提交評論