版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、8.1 實(shí)現(xiàn)順序查找的算法一, 實(shí)驗(yàn)?zāi)康?1.熟悉掌握各種查找方法,深刻理解各種查找算法及其執(zhí)行的過(guò)程;2.學(xué)會(huì)分析各種查找算法的性能。二, 實(shí)驗(yàn)內(nèi)容8.1 實(shí)現(xiàn)順序查找的算法編寫(xiě)一個(gè)程序,輸出在順序表3,6,2,10,1,8,5,7,4,9中采用順序查找法查找關(guān)鍵字5的結(jié)果。8.2 實(shí)現(xiàn)折半查找算法編寫(xiě)一個(gè)程序,輸出在順序表1,2,3,4,5,6,7,8,9,10中采用折半查找方法查找關(guān)鍵字9的結(jié)果。要求:(1)用非遞歸方法;(2)用遞歸方法。8.3 實(shí)現(xiàn)二叉排序樹(shù)的基本運(yùn)算編寫(xiě)一個(gè)程序?qū)崿F(xiàn)二叉排序樹(shù)的基本運(yùn)算,并在此基礎(chǔ)上完成如下功能:(1)由4,9,0,1,8,6,3,5,2,7創(chuàng)建一個(gè)
2、二叉排序樹(shù)bt;(2)判斷bt是否為一棵二叉排序樹(shù)(提示:在遍歷過(guò)程中檢查是否符合二叉排序樹(shù)定義);(3)采用非遞歸方法查找關(guān)鍵字為6的結(jié)點(diǎn),并輸出其查找路徑(提示:查找過(guò)程中保留經(jīng)過(guò)的結(jié)點(diǎn)信息,找到后順序輸出之)。8.4 實(shí)現(xiàn)哈希表的相關(guān)運(yùn)算編寫(xiě)一個(gè)程序,實(shí)現(xiàn)哈希表的相關(guān)運(yùn)算,并在此基礎(chǔ)上完成如下功能:(1)建立16,74,60,43,54,90,46,31,29,88,77哈希表A012,哈希函數(shù)為H(k)=key % 11,并采用線性探測(cè)法解決沖突。輸出哈希表;(2)在上述哈希表中查找關(guān)鍵字為29的記錄;(3)在上述哈希表中刪除關(guān)鍵字為77的記錄,再將其插入,然后輸出哈希表。要求:輸出格
3、式哈希地址:0 1 2 . 12關(guān)鍵字值:三, 源代碼及結(jié)果截圖8.1/實(shí)現(xiàn)順序查找的算法#include <stdio.h>#define MAXL 100/定義表中最多記錄個(gè)數(shù)typedef int KeyType;typedef int InfoType;typedef struct KeyType key; /KeyType為關(guān)鍵字的數(shù)據(jù)類(lèi)型 InfoType data; /其他數(shù)據(jù) NodeType;typedef NodeType SeqListMAXL; /順序表類(lèi)型int Search(SeqList R,int n,KeyType k) /順序查找算法 int i
4、=0; while (i<n && Ri.key!=k) printf("%d ",Ri.key);i+;/從表頭往后找 if (i>=n) return -1; else printf("%d",Ri.key);return i;void main()SeqList R;int n=10;KeyType k=5;InfoType a=3,6,2,10,1,8,5,7,4,9;int i;for (i=0;i<n;i+)/建立順序表Ri.key=ai;printf("查找結(jié)果:n");if (i=Se
5、arch(R,n,k)!=-1)printf("n元素%d的位置是:%d",k,i);elseprintf("n元素%d不在表中n",k);printf("n");8.2/實(shí)現(xiàn)折半查找算法#include <stdio.h>#define MAXL 100/定義表中最多記錄個(gè)數(shù) typedef int KeyType;typedef char InfoType10;typedef struct KeyType key; /KeyType為關(guān)鍵字的數(shù)據(jù)類(lèi)型 InfoType data; /其他數(shù)據(jù) NodeType;type
6、def NodeType SeqListMAXL;/順序表類(lèi)型int BinSearch1(SeqList R,int n,KeyType k) /非遞歸二分查找算法int low=0,high=n-1,mid,count=0;while (low<=high) mid=(low+high)/2;printf("第%d次查找:在%d,%d中查找到元素R%d:%dn",+count,low,high,mid,Rmid.key);if (Rmid.key=k) /查找成功返回 return mid;if (Rmid.key>k) /繼續(xù)在Rlow.mid-1中查找
7、high=mid-1;elselow=mid+1; /繼續(xù)在Rmid+1.high中查找 return -1;int BinSearch2(SeqList R,KeyType k,int low,int high,int count) /遞歸二分查找算法int mid;if(low<=high) mid=(low+high)/2;printf("第%d次查找:在%d,%d中查找到元素R%d:%dn",+count,low,high,mid,Rmid.key);if (Rmid.key=k) /查找成功返回 return mid;else if (Rmid.key>
8、;k) /繼續(xù)在Rlow.mid-1中查找 BinSearch2(R, k,low,mid-1,count);elseBinSearch2(R, k,mid+1,high,count); /繼續(xù)在Rmid+1.high中查找 else return -1;void main()SeqList R;KeyType k=9;int a=1,2,3,4,5,6,7,8,9,10,i,n=10;for (i=0;i<n;i+)/建立順序表 Ri.key=ai;printf("用非遞歸方法:n");if (i=BinSearch1(R,n,k)!=-1)printf("
9、;元素%d的位置是%dn",k,i);elseprintf("元素%d不在表中n",k);printf("用遞歸方法:n");if (i=BinSearch2(R,k,0,9,0)!=-1)printf("元素%d的位置是%dn",k,i);elseprintf("元素%d不在表中n",k);8.3/實(shí)現(xiàn)二叉排序樹(shù)的基本運(yùn)算#include<stdio.h> /EOF,NULL#include<stdlib.h> /atoi( )#include<iostream.h>
10、 /cout,cintypedef int Status;typedef struct BTNode int key; struct BTNode *lchild; struct BTNode *rchild;BTNode;/定義二叉排序樹(shù)插入結(jié)點(diǎn)的算法int BSTInsert(BTNode *&T,int k) if(T=NULL) T=(BTNode *)malloc(sizeof(BTNode); T->lchild=T->rchild=NULL; T->key=k; return 1; else if(k=T->key) return 0; else
11、if(k<T->key) return BSTInsert(T->lchild, k); else return BSTInsert(T->rchild, k); /定義二叉排序樹(shù)的創(chuàng)建算法BTNode *createBST(int k,int n) BTNode *T; T=NULL; for(int i=0;i<=n-1;i+) BSTInsert(T,ki); return T;/判斷是否為二叉排序樹(shù)Status Judge(BTNode *&T)if(T=NULL)return 1;else if(T>T->lchild)&&a
12、mp;(T<T->rchild)Judge(T->lchild);Judge(T->rchild);else return 0;/定義二叉排序樹(shù)的查找算法BTNode *BSTSearch(BTNode *&T,int k) if(T=NULL) return NULL; else printf("%d ",T->key); if(T->key=k) return T; else if(k<T->key) return BSTSearch(T->lchild, k); else return BSTSearch(
13、T->rchild, k); void main() int a50=4,9,0,1,8,6,3,5,2,7; BTNode *bt=createBST(a,10);if(Judge(bt)=0) cout<<"bt不是二叉排序樹(shù)"<<endl;else cout<<"bt是二叉排序樹(shù)"<<endl;cout<<"查找關(guān)鍵字6的查找路徑:"<<endl;BTNode *t=BSTSearch(bt,6);cout<<endl;8.4/實(shí)現(xiàn)哈希表的
14、相關(guān)運(yùn)算#include <stdio.h>#define MaxSize 100/定義最大哈希表長(zhǎng)度#define NULLKEY 0/定義空關(guān)鍵字值 #define DELKEY-1/定義被刪關(guān)鍵字值 typedef int KeyType;/關(guān)鍵字類(lèi)型 typedef char * InfoType;/其他數(shù)據(jù)類(lèi)型typedef structKeyType key;/關(guān)鍵字域InfoType data;/其他數(shù)據(jù)域int count;/探查次數(shù)域 HashTableMaxSize;/哈希表類(lèi)型void InsertHT(HashTable ha,int *n,KeyType
15、k,int p) /將關(guān)鍵字k插入到哈希表中int i,adr;adr=k % p;if (haadr.key=NULLKEY | haadr.key=DELKEY)/xj可以直接放在哈希表中haadr.key=k;haadr.count=1;else/發(fā)生沖突時(shí)采用線性探查法解決沖突i=1;/i記錄xj發(fā)生沖突的次數(shù)do adr=(adr+1) % p;i+; while (haadr.key!=NULLKEY && haadr.key!=DELKEY);haadr.key=k;haadr.count=i;n+;void CreateHT(HashTable ha,KeyTy
16、pe x,int n,int m,int p) /創(chuàng)建哈希表int i,n1=0;for (i=0;i<m;i+)/哈希表置初值 hai.key=NULLKEY; hai.count=0; for (i=0;i<n;i+)InsertHT(ha,&n1,xi,p);int SearchHT(HashTable ha,int p,KeyType k)/在哈希表中查找關(guān)鍵字kint i=0,adr;adr=k % p;while (haadr.key!=NULLKEY && haadr.key!=k)i+;/采用線性探查法找下一個(gè)地址adr=(adr+1) %
17、p;if (haadr.key=k)/查找成功return adr;else/查找失敗return -1;int DeleteHT(HashTable ha,int p,int k,int *n)/刪除哈希表中關(guān)鍵字kint adr;adr=SearchHT(ha,p,k);if (adr!=-1)/在哈希表中找到該關(guān)鍵字haadr.key=DELKEY;n-;/哈希表長(zhǎng)度減1return 1;else/在哈希表中未找到該關(guān)鍵字return 0;void DispHT(HashTable ha,int n,int m) /輸出哈希表float avg=0;int i;printf("
18、 哈希表地址:t");for (i=0;i<m;i+) printf(" %3d",i);printf(" n"); printf(" 哈希表關(guān)鍵字:t");for (i=0;i<m;i+) if (hai.key=NULLKEY | hai.key=DELKEY)printf(" ");/輸出3個(gè)空格elseprintf(" %3d",hai.key);printf(" n");printf(" 搜索次數(shù):t");for (i=0;
19、i<m;i+)if (hai.key=NULLKEY | hai.key=DELKEY)printf(" ");/輸出3個(gè)空格elseprintf(" %3d",hai.count);printf(" n"); for (i=0;i<m;i+)if (hai.key!=NULLKEY && hai.key!=DELKEY)avg=avg+hai.count;avg=avg/n;printf(" 平均搜索長(zhǎng)度ASL(%d)=%gn",n,avg);void main()int x=16,74,60,43,54,90,46,31
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年土壤水分測(cè)量?jī)x項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年冰棒袋項(xiàng)目投資價(jià)值分析報(bào)告
- 2025年偏振光攝影燈項(xiàng)目可行性研究報(bào)告
- 2025至2030年旋裝式機(jī)油濾清器項(xiàng)目投資價(jià)值分析報(bào)告
- 四年級(jí)數(shù)學(xué)(四則混合運(yùn)算)計(jì)算題專(zhuān)項(xiàng)練習(xí)與答案匯編
- 醫(yī)院改造工程質(zhì)保期協(xié)議
- KTV裝修安全合同
- 生態(tài)旅游開(kāi)發(fā)居間合同
- 醫(yī)療設(shè)備安裝項(xiàng)目的工期管理方案
- 棋牌室裝修終止合同范本
- 表B. 0 .11工程款支付報(bào)審表
- 警務(wù)航空無(wú)人機(jī)考試題庫(kù)及答案
- 空氣自動(dòng)站儀器運(yùn)營(yíng)維護(hù)項(xiàng)目操作說(shuō)明以及簡(jiǎn)單故障處理
- 新生兒窒息復(fù)蘇正壓通氣課件
- 2022年12月Python-一級(jí)等級(jí)考試真題(附答案-解析)
- 法律顧問(wèn)投標(biāo)書(shū)
- 班主任培訓(xùn)簡(jiǎn)報(bào)4篇(一)
- 成都市數(shù)學(xué)八年級(jí)上冊(cè)期末試卷含答案
- T-CHSA 020-2023 上頜骨缺損手術(shù)功能修復(fù)重建的專(zhuān)家共識(shí)
- 危重癥患者轉(zhuǎn)運(yùn)指南-課件
- Hypermesh lsdyna轉(zhuǎn)動(dòng)副連接課件完整版
評(píng)論
0/150
提交評(píng)論