數(shù)據(jù)結(jié)構(gòu)-實驗8查找的算法講解_第1頁
數(shù)據(jù)結(jié)構(gòu)-實驗8查找的算法講解_第2頁
數(shù)據(jù)結(jié)構(gòu)-實驗8查找的算法講解_第3頁
數(shù)據(jù)結(jié)構(gòu)-實驗8查找的算法講解_第4頁
數(shù)據(jù)結(jié)構(gòu)-實驗8查找的算法講解_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、8.1 實現(xiàn)順序查找的算法一, 實驗?zāi)康?1.熟悉掌握各種查找方法,深刻理解各種查找算法及其執(zhí)行的過程;2.學(xué)會分析各種查找算法的性能。二, 實驗內(nèi)容8.1 實現(xiàn)順序查找的算法編寫一個程序,輸出在順序表3,6,2,10,1,8,5,7,4,9中采用順序查找法查找關(guān)鍵字5的結(jié)果。8.2 實現(xiàn)折半查找算法編寫一個程序,輸出在順序表1,2,3,4,5,6,7,8,9,10中采用折半查找方法查找關(guān)鍵字9的結(jié)果。要求:(1)用非遞歸方法;(2)用遞歸方法。8.3 實現(xiàn)二叉排序樹的基本運算編寫一個程序?qū)崿F(xiàn)二叉排序樹的基本運算,并在此基礎(chǔ)上完成如下功能:(1)由4,9,0,1,8,6,3,5,2,7創(chuàng)建一個

2、二叉排序樹bt;(2)判斷bt是否為一棵二叉排序樹(提示:在遍歷過程中檢查是否符合二叉排序樹定義);(3)采用非遞歸方法查找關(guān)鍵字為6的結(jié)點,并輸出其查找路徑(提示:查找過程中保留經(jīng)過的結(jié)點信息,找到后順序輸出之)。8.4 實現(xiàn)哈希表的相關(guān)運算編寫一個程序,實現(xiàn)哈希表的相關(guān)運算,并在此基礎(chǔ)上完成如下功能:(1)建立16,74,60,43,54,90,46,31,29,88,77哈希表A012,哈希函數(shù)為H(k)=key % 11,并采用線性探測法解決沖突。輸出哈希表;(2)在上述哈希表中查找關(guān)鍵字為29的記錄;(3)在上述哈希表中刪除關(guān)鍵字為77的記錄,再將其插入,然后輸出哈希表。要求:輸出格

3、式哈希地址:0 1 2 . 12關(guān)鍵字值:三, 源代碼及結(jié)果截圖8.1/實現(xiàn)順序查找的算法#include #define MAXL 100/定義表中最多記錄個數(shù)typedef int KeyType;typedef int InfoType;typedef struct KeyType key; /KeyType為關(guān)鍵字的數(shù)據(jù)類型 InfoType data; /其他數(shù)據(jù) NodeType;typedef NodeType SeqListMAXL; /順序表類型int Search(SeqList R,int n,KeyType k) /順序查找算法 int i=0; while (i=n)

4、 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;in;i+)/建立順序表Ri.key=ai;printf(查找結(jié)果:n);if (i=Search(R,n,k)!=-1)printf(n元素%d的位置是:%d,k,i);elseprintf(n元素%d不在表中n,k);printf(n);8.2/實現(xiàn)折半查找算法#include #define MAXL 100/定義表中最多記錄

5、個數(shù) typedef int KeyType;typedef char InfoType10;typedef struct KeyType key; /KeyType為關(guān)鍵字的數(shù)據(jù)類型 InfoType data; /其他數(shù)據(jù) NodeType;typedef NodeType SeqListMAXL;/順序表類型int BinSearch1(SeqList R,int n,KeyType k) /非遞歸二分查找算法int low=0,high=n-1,mid,count=0;while (lowk) /繼續(xù)在Rlow.mid-1中查找 high=mid-1;elselow=mid+1; /繼

6、續(xù)在Rmid+1.high中查找 return -1;int BinSearch2(SeqList R,KeyType k,int low,int high,int count) /遞歸二分查找算法int mid;if(lowk) /繼續(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,

7、i,n=10;for (i=0;in;i+)/建立順序表 Ri.key=ai;printf(用非遞歸方法:n);if (i=BinSearch1(R,n,k)!=-1)printf(元素%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/實現(xiàn)二叉排序樹的基本運算#include /EOF,NULL#include /atoi( )#include /cout,cintyp

8、edef int Status;typedef struct BTNode int key; struct BTNode *lchild; struct BTNode *rchild;BTNode;/定義二叉排序樹插入結(jié)點的算法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 if(kkey) return BSTInsert(T-lchil

9、d, k); else return BSTInsert(T-rchild, k); /定義二叉排序樹的創(chuàng)建算法BTNode *createBST(int k,int n) BTNode *T; T=NULL; for(int i=0;iT-lchild)&(Trchild)Judge(T-lchild);Judge(T-rchild);else return 0;/定義二叉排序樹的查找算法BTNode *BSTSearch(BTNode *&T,int k) if(T=NULL) return NULL; else printf(%d ,T-key); if(T-key=k) return

10、T; else if(kkey) return BSTSearch(T-lchild, k); else return BSTSearch(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) coutbt不是二叉排序樹endl;else coutbt是二叉排序樹endl;cout查找關(guān)鍵字6的查找路徑:endl;BTNode *t=BSTSearch(bt,6);coutendl;8.4/實現(xiàn)哈希表的相關(guān)運算#include #define MaxSi

11、ze 100/定義最大哈希表長度#define NULLKEY 0/定義空關(guān)鍵字值 #define DELKEY-1/定義被刪關(guān)鍵字值 typedef int KeyType;/關(guān)鍵字類型 typedef char * InfoType;/其他數(shù)據(jù)類型typedef structKeyType key;/關(guān)鍵字域InfoType data;/其他數(shù)據(jù)域int count;/探查次數(shù)域 HashTableMaxSize;/哈希表類型void InsertHT(HashTable ha,int *n,KeyType k,int p) /將關(guān)鍵字k插入到哈希表中int i,adr;adr=k % p

12、;if (haadr.key=NULLKEY | haadr.key=DELKEY)/xj可以直接放在哈希表中haadr.key=k;haadr.count=1;else/發(fā)生沖突時采用線性探查法解決沖突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,KeyType x,int n,int m,int p) /創(chuàng)建哈希表int i,n1=0;for (i=0;

13、im;i+)/哈希表置初值 hai.key=NULLKEY; hai.count=0; for (i=0;in;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+;/采用線性探查法找下一個地址adr=(adr+1) % p;if (haadr.key=k)/查找成功return adr;else/查找失敗return -1;int DeleteHT(HashT

14、able 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-;/哈希表長度減1return 1;else/在哈希表中未找到該關(guān)鍵字return 0;void DispHT(HashTable ha,int n,int m) /輸出哈希表float avg=0;int i;printf( 哈希表地址:t);for (i=0;im;i+) printf( %3d,i);printf( n); printf( 哈希表關(guān)鍵字:t);for (i

15、=0;im;i+) if (hai.key=NULLKEY | hai.key=DELKEY)printf( );/輸出3個空格elseprintf( %3d,hai.key);printf( n);printf( 搜索次數(shù):t);for (i=0;im;i+)if (hai.key=NULLKEY | hai.key=DELKEY)printf( );/輸出3個空格elseprintf( %3d,hai.count);printf( n); for (i=0;im;i+)if (hai.key!=NULLKEY & hai.key!=DELKEY)avg=avg+hai.count;avg=

16、avg/n;printf( 平均搜索長度ASL(%d)=%gn,n,avg);void main()int x=16,74,60,43,54,90,46,31,29,88,77;int n=11,m=13,p=13,i,k=29;HashTable ha;CreateHT(ha,x,n,m,p);printf(n);DispHT(ha,n,m);printf( 查找關(guān)鍵字29:n);i=SearchHT(ha,p,k);if (i!=-1)printf( ha%d.key=%dn,i,k);elseprintf( 未找到%dn,k);k=77;printf( 刪除關(guān)鍵字%dn,k);DeleteHT(ha,p,k,&n);DispHT(ha,n,m);i=SearchHT(ha,

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論