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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

3、式哈希地址:0 1 2 . 12關鍵字值:三, 源代碼及結果截圖8.1/實現順序查找的算法#include <stdio.h>#define MAXL 100/定義表中最多記錄個數typedef int KeyType;typedef int InfoType;typedef struct KeyType key; /KeyType為關鍵字的數據類型 InfoType data; /其他數據 NodeType;typedef NodeType SeqListMAXL; /順序表類型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("查找結果: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/實現折半查找算法#include <stdio.h>#define MAXL 100/定義表中最多記錄個數 typedef int KeyType;typedef char InfoType10;typedef struct KeyType key; /KeyType為關鍵字的數據類型 InfoType data; /其他數據 NodeType;type

6、def NodeType SeqListMAXL;/順序表類型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/實現二叉排序樹的基本運算#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;/定義二叉排序樹插入結點的算法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); /定義二叉排序樹的創(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;/判斷是否為二叉排序樹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;/定義二叉排序樹的查找算法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不是二叉排序樹"<<endl;else cout<<"bt是二叉排序樹"<<endl;cout<<"查找關鍵字6的查找路徑:"<<endl;BTNode *t=BSTSearch(bt,6);cout<<endl;8.4/實現哈希表的

14、相關運算#include <stdio.h>#define MaxSize 100/定義最大哈希表長度#define NULLKEY 0/定義空關鍵字值 #define DELKEY-1/定義被刪關鍵字值 typedef int KeyType;/關鍵字類型 typedef char * InfoType;/其他數據類型typedef structKeyType key;/關鍵字域InfoType data;/其他數據域int count;/探查次數域 HashTableMaxSize;/哈希表類型void InsertHT(HashTable ha,int *n,KeyType

15、k,int p) /將關鍵字k插入到哈希表中int i,adr;adr=k % p;if (haadr.key=NULLKEY | haadr.key=DELKEY)/xj可以直接放在哈希表中haadr.key=k;haadr.count=1;else/發(fā)生沖突時采用線性探查法解決沖突i=1;/i記錄xj發(fā)生沖突的次數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)/在哈希表中查找關鍵字kint i=0,adr;adr=k % p;while (haadr.key!=NULLKEY && haadr.key!=k)i+;/采用線性探查法找下一個地址adr=(adr+1) %

17、p;if (haadr.key=k)/查找成功return adr;else/查找失敗return -1;int DeleteHT(HashTable ha,int p,int k,int *n)/刪除哈希表中關鍵字kint adr;adr=SearchHT(ha,p,k);if (adr!=-1)/在哈希表中找到該關鍵字haadr.key=DELKEY;n-;/哈希表長度減1return 1;else/在哈希表中未找到該關鍵字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(" 哈希表關鍵字:t");for (i=0;i<m;i+) if (hai.key=NULLKEY | hai.key=DELKEY)printf(" ");/輸出3個空格elseprintf(" %3d",hai.key);printf(" n");printf(" 搜索次數:t");for (i=0;

19、i<m;i+)if (hai.key=NULLKEY | hai.key=DELKEY)printf(" ");/輸出3個空格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(" 平均搜索長度ASL(%d)=%gn",n,avg);void main()int x=16,74,60,43,54,90,46,31

溫馨提示

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

評論

0/150

提交評論