ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:22.38KB ,
资源ID:10047628      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10047628.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实验七 查找.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实验七 查找.docx

1、数据结构实验七 查找实验七 查找一、实验目的1。 掌握查找的不同方法,并能用高级语言实现查找算法; 2. 熟练掌握二叉排序树的构造和查找方法。3。 熟练掌握静态查找表及哈希表查找方法.二、实验内容设计一个读入一串整数,然后构造二叉排序树,进行查找。三、实验步骤1. 从空的二叉树开始,每输入一个结点数据,就建立一个新结点插入到当前已生成的二叉排序树中。2. 在二叉排序树中查找某一结点。3.用其它查找算法进行排序(课后自己做)。四、实现提示1。 定义结构typedef struct node int key; int other; struct node *lchild, rchild; bstn

2、ode; void inorder ( t ) if (t!=Null) inorder(tlchild); printf(“4d”, tkey); inorder(trchild); bstnode insertbst(t, s) bstnode *s, *t; bstnode *f, *p; p=t; while(p!=Null) f=p; if (skey= =pkey) return t; if (skeypkey) p=plchild; else p=prchild; if(t= =Null) return s; if (skeyfkey) flchild=s; else frchi

3、ld=s; return t; bstnode creatord( ) bstnode t, s; int key; t=Null; scanf(“d”,key); while (key!=0) s=malloc(sizeof (bitree)); skey=key; slchild=Null; srchild=Null; scanf(“d, data); sother=data; t=insertbst(t, s); scanf(“%d”,&key); return t; 五、思考与提高1。 用其它的查找方法完成该算法。2。比较各种算法的时间及空间复杂度.六、完整参考程序1.折半查找#inc

4、lude conio。hinclude stdio。hdefine MAX 30 /定义有序查找表的最大长度typedef struct char elemMAX; /有序查找表 int length; /length指示当前有序查找表的长度SSTable;void initial(SSTable ); /初始化有序查找表int search(SSTable,int); /在有序查找表中查找元素void print(SSTable); /显示有序查找表中所有元素void main()SSTable ST; /ST为一有序查找表 int ch,loc,flag=1; char j; initia

5、l(ST); /初始化有序查找表 while(flag) printf(”请选择:n”); printf(1.显示所有元素n”); printf(”2.查找一个元素n”); printf(3.退出n); scanf(” c,&j); switch(j) case 1:print(ST); break; /显示所有元素 case 2:printf(请输入要查找的元素:”); scanf(”d”,&ch); /输入要查找的元素的关键字 loc=search(ST,ch); /查找 if(loc!=0) printf(”该元素所在位置是:%dn”,loc); /显示该元素位置 else printf

6、(”%d 不存在!n,ch);/当前元素不存在 break; default:flag=0; printf(”程序运行结束!按任意键退出!n);void initial(SSTable v)/初始化有序查找表 int i; printf(”请输入静态表的元素个数:”); /输入有序查找表初始化时的长度 scanf(”d,&v.length); printf(”请从小到大输入d个元素(整形数):n,v。length); getchar(); for(i=1;i=v。length;i+) scanf(d”,v。elemi); /从小到大输入有序查找表的各元素int search(SSTable v

7、,int ch)/在有序查找表中查找ch的位置,成功返回其位置,失败返回0 int low,high,mid; low=1;high=v.length; /置区间初值 while(low=high) mid=(low+high)/2; if(v.elemmid=ch) return mid; /找到待查元素 else if(v。elemmidch) high=mid1; /继续在前半区间进行查找 else low=mid+1; /继续在后半区间进行查找 return 0; /找不到时,i为0void print(SSTable v) /显示当前有序查找表所有元素int i; for(i=1;i

8、=v.length;i+) printf(”%d ,v.elemi); printf(”n”);2。二叉排序树的建立与查找include data); if(Trchild) InorderBST(Trchild);BOOL SearchBST(BiTree T,char key,BiTree f,BiTree p)/在根指针T所指二叉排序树中递归的查找其关键字等于key的元素,若查找成功 /则指针p指向该数据元素,并返回True,否则指针指向查找路径上访问的最后一 /个结点并返回False,指针f指向T的双亲,其初始调用值为NULL BOOL tmp1,tmp2; tmp1=tmp2=Fal

9、se; if(!T) p=f;return False; /查找不成功 else if(key=Tdata) p=T;return True; /查找成功 else if(keyTdata) tmp1=SearchBST(T-lchild,key,T,p); /在左子树中继续查找 else tmp2=SearchBST(T-rchild,key,T,p); /在右子树中继续查找 if(tmp1tmp2) return True; /若在子树中查找成功,向上级返回True else return False; /否则返回FalseBOOL InsertBST(BiTree T,char e)/当

10、二叉排序树T中不存在元素e时,插入e并返回True,否则返回False BiTree p,s; if(!SearchBST(T,e,NULL,p) /查找不成功 s=(BiTree)malloc(sizeof(BiTNode)); s-data=e; slchild=srchild=NULL; if(!p) T=s; /被插结点s为新的根结点 else if(epdata) plchild=s; /被插结点*s为左孩子 else p-rchild=s; /被插结点s为右孩子 return True; /成功插入 else return False; /树中已存在关键字为e的数据元素BOOL D

11、eleteBST(BiTree T,char key)/若二叉排序树T中存在关键字等于key的数据元素时,则删除该数据元素结点 /并返回True,否则返回False BOOL tmp1,tmp2; tmp1=tmp2=False; if(!T) return False; /不存在关键字等于key的数据元素 else if(key=Tdata) Delete(T); return True; /找到关键字等于key的数据元素并删除它 else if(keyTdata) tmp1=DeleteBST(Tlchild,key); /继续在左子树中删除 else tmp2=DeleteBST(Trc

12、hild,key); /继续在右子树中删除 if(tmp1|tmp2) return True; /在子树中删除成功,返回True else return False; /不存在该元素 void Delete(BiTree p)/在二叉排序树中删除结点p,并重接它的左或右子树 BiTree s,q; if(!p-rchild) /右子树空,只需重接它的左子树 q=p; p=plchild; free(q); else if(!plchild) /左子树空,只需重接它的右子树 q=p; p=prchild; free(q); else /左右子树均不空 q=p; s=p-lchild; while(s-rchild) q=s;s=srchild; /转左,然后向右走到尽头 pdata=sdata; /s指向被删结点的“前驱 if(q!=p) q-rchild=srchild; /重接q的右子树 else qlchild=slchild; /重接q的左子树 free(s);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1