




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.8.1 实现顺序查找的算法一, 实验目的 1.熟悉掌握各种查找方法,深刻理解各种查找算法及其执行的过程;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创建一
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 #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=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(查找结果:n);if (i=Search(R,n,k)!=-1)printf(n元素%d的位置是:%d,k,i);elseprintf(n元素%d不在表中n,k);printf(n);8.2/实现折半查找算法#include #define MAXL 100/定义表中最多记
5、录个数 typedef int KeyType;typedef char InfoType10;typedef struct KeyType key; /KeyType为关键字的数据类型 InfoType data; /其他数据 NodeType;typedef NodeType SeqListMAXL;/顺序表类型int BinSearch1(SeqList R,int n,KeyType k) /非递归二分查找算法int low=0,high=n-1,mid,count=0;while (lowk) /继续在Rlow.mid-1中查找 high=mid-1;elselow=mid+1; /
6、继续在Rmid+1.high中查找 return -1;int BinSearch2(SeqList R,KeyType k,int low,int high,int count) /递归二分查找算法int mid;if(lowk) /继续在Rlow.mid-1中查找 BinSearch2(R, k,low,mid-1,count);elseBinSearch2(R, k,mid+1,high,count); /继续在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/实现二叉排序树的基本运算#include /EOF,NULL#include /atoi( )#include /cout,cinty
8、pedef 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 if(kkey) return BSTInsert(T-lchi
9、ld, k); else return BSTInsert(T-rchild, k); /定义二叉排序树的创建算法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查找关键字6的查找路径:endl;BTNode *t=BSTSearch(bt,6);coutendl;8.4/实现哈希表的相关运算#include #define MaxS
11、ize 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 k,int p) /将关键字k插入到哈希表中int i,adr;adr=k %
12、p;if (haadr.key=NULLKEY | haadr.key=DELKEY)/xj可以直接放在哈希表中haadr.key=k;haadr.count=1;else/发生冲突时采用线性探查法解决冲突i=1;/i记录xj发生冲突的次数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) /创建哈希表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)/在哈希表中查找关键字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(Hash
14、Table 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( 哈希表地址:t);for (i=0;im;i+) printf( %3d,i);printf( n); printf( 哈希表关键字:t);for (
15、i=0;im;i+) if (hai.key=NULLKEY | hai.key=DELKEY)printf( );/输出3个空格elseprintf( %3d,hai.key);printf( n);printf( 搜索次数: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( 查找关键字29:n);i=SearchHT(ha,p,k);if (i!=-1)printf( ha%d.key=%dn,i,k);elseprintf( 未找到%dn,k);k=77;printf( 删除关键字%dn,k);DeleteHT(ha,p,k,&n);DispHT(ha,n,m);i=SearchHT(ha,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年转租房合同协议书模板
- 2025建筑工程防水补漏合同
- 2024年太阳能电池背膜投资申请报告代可行性研究报告
- 2025办公室租赁合同「范本」
- 2025年广州市教育行业职工劳动合同
- 2025合作伙伴经营合同
- 租赁合同签订流程优化与风险管理考核试卷
- 2025写字楼租赁合同范本参考
- 2025工程合同管理 高速公路工程建设合同索赔研究
- 2025智能锁购买合同范本
- 2025年江西九江市城市发展集团有限公司招聘笔试参考题库含答案解析
- 女性生命觉醒
- 2025届高考物理一轮复习:人教版(2019)高中物理必修第二册基础知识自测填空练习题(含答案)
- 《陆上风力发电机组混凝土塔架生产技术规程》编制说明
- 机械行业重点岗位安全手册
- 酒店新员工安全知识培训
- 基于大数据的公共安全风险预测模型研究报告
- 2025年广东省广州市荔湾区中考一模英语模拟试题
- (高清版)DB11∕T1191.3-2024实验室危险化学品安全管理要求 第3部分:科研单位
- DBJ33∕T 1104-2022 建设工程监理工作标准
- 种子轮融资合同协议范本
评论
0/150
提交评论