欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    大数据结构-实验8查找地算法.doc

    • 资源ID:1131933       资源大小:112.50KB        全文页数:13页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    大数据结构-实验8查找地算法.doc

    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创建一个二叉排序树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的记录,再将其插入,然后输出哈希表。要求:输出格式哈希地址:0 1 2 . 12关键字值:三, 源代码与结果截图/实现顺序查找的算法#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=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=Search(R,n,k)!=-1)printf("n元素%d的位置是:%d",k,i);elseprintf("n元素%d不在表中n",k);printf("n");/实现折半查找算法#include <stdio.h>#define MAXL 100/定义表中最多记录个数 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 (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) /继续在Rlow.mid-1中查找 high=mid-1;elselow=mid+1; /继续在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>k) /继续在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,i,n=10;for (i=0;i<n;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);/实现二叉排序树的根本运算#include<stdio.h> /EOF,NULL#include<stdlib.h> /atoi( )#include<iostream.h> /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 if(k<T->key) return BSTInsert(T->lchild, k); else return BSTInsert(T->rchild, k); /定义二叉排序树的创建算法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)&&(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(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;/实现哈希表的相关运算#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 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/发生冲突时采用线性探查法解决冲突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;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) % 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(" 哈希表地址: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;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,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,p,k);if (i!=-1)printf(" ha%d.key=%dn",i,k);elseprintf(" 未找到%dn",k);printf(" 插入关键字%dn",k);InsertHT(ha,&n,k,p);DispHT(ha,n,m);printf("n");四,实验小结1、 通过本次实验,加深了我对查找表的认识。2、 有序表的查找之折半查找:前提必须是有序表,性能只有在均匀分布的时候才是最优的。3、 二叉排序树查找:通过一系列的查找和插入过程形成的树。之所以叫做排序树,因为按照中序遍历可得一个有序的序列。

    注意事项

    本文(大数据结构-实验8查找地算法.doc)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开