数据结构查找实验.docx

上传人:b****7 文档编号:9067677 上传时间:2023-02-03 格式:DOCX 页数:10 大小:219.40KB
下载 相关 举报
数据结构查找实验.docx_第1页
第1页 / 共10页
数据结构查找实验.docx_第2页
第2页 / 共10页
数据结构查找实验.docx_第3页
第3页 / 共10页
数据结构查找实验.docx_第4页
第4页 / 共10页
数据结构查找实验.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

数据结构查找实验.docx

《数据结构查找实验.docx》由会员分享,可在线阅读,更多相关《数据结构查找实验.docx(10页珍藏版)》请在冰豆网上搜索。

数据结构查找实验.docx

数据结构查找实验

数据结构实验报告

课程数据结构实验实验名称查找

系别计算机学院专业班级组别_____________

一.实验目的:

1.掌握顺序查找,二分查找的算法

2.能运用线性表的查找方法解决实际问题

二.实验内容

(-)实验题目一:

写给出一个无序表A中采用顺序查找算法查找值为x的元素的算法

1.要点分析:

顺序查找首先从表的先端开始,依次与给定值x进行比较,直达找到与其相等的元素值,返回该元素值的下标,查找成功。

否则给出查找失败信息。

2.程序源代码:

#include

#defineN10

intsearch(intA[],intx,intn)

{

inti=0;

while(i

=x)//找遍且找到

i++;

if(i>=n)

return-1;

else

returni;

}

voidmain()

{

inta[N]={2,38,42,44,25,12,3,1,23,89},d,i,k;

printf("A数组下标:

\n");

for(i=0;i

printf("%d",i);

printf("\n");

printf("A数组值:

\n");

for(i=0;i

printf("%d",a[i]);

printf("\n输入要查找的值:

");

scanf("%d",&d);

k=search(a,d,N);

if(k>=0)

printf("a[%d]=%d\n",k,d);

else

printf("%d未找到\n",d);

}

3.实验结果

(2)实验题目二:

编写一个算法,利用二分查找算法在一个有序表中插入一个元素x,并保持表的有序性。

1.要点分析:

首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。

重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

2.程序源代码:

#include

#include

#definemaxnum100

intinput(int*);//输入数据

intsearch(int*,int,int);//查找插入位置

voidplug(int*,int,int);//插入数据

voidmain()

{

intdata[maxnum],m;

intinsert=1;

m=input(data);

printf("请输入要插入的数据:

\n");//输入插入的数据

scanf("%d",data);//输入插入的数据存放在data数组0号位置

insert=search(data,1,m);//找到数据要插入的位置

plug(data,insert,m);//运用递归的方法插入数据

printf("最后结果:

\n");

for(insert=1;insert<=m+1;insert++)

printf("%d",*(data+insert));

getchar();

}

intinput(int*data)

{

inti,m;

printf("请输入该有序表的长度:

\n");

scanf("%d",&m);

printf("请按大小顺序输入%d个数据\n",m);

for(i=1;i<=m;i++)

scanf("%d",data+i);

returnm;

}

intsearch(int*data,intlow,inthigh)

{

intmid;

if(low>high)//没有找到插入位置

returnlow;

else

{

mid=(low+high)/2;

if(*(data+mid)==*data)

returnmid;

elseif(*(data+mid)<*data)

low=mid+1;

elseif(*(data+mid)>*data)

high=mid-1;

}

search(data,low,high);

}

voidplug(int*data,intinsert,intm)//移动并插入数据

{

inti;

for(i=m;i>=insert;i--)

*(data+i+1)=*(data+i);

*(data+insert)=*data;

}

3.实验结果

(三)实验题目:

设计一个算法,读入一串整数,构造其对应的二叉排序树

1.要点分析

二叉排序树的递归式定义。

二叉排序树又称二叉查找树,它可以是一棵空树,若非空时具有下述性质:

1、若根结点的左子树非空,则左子树上所有结点的关键字值均小于等于根结点的关键字值。

2、若根结点的右子树非空,则右子树上所有结点的关键字值均大于等于根结点的关键字值。

3、根结点的左、右子树也分别为二叉排序树。

二叉排序树建立说明:

当需要插入一个节点到二叉排序树时,需要先找到它的父节点。

其实它就是用插入的节点不断的和每一个节点比较(第一次当然是和根节点比较啦),如果小于等于则进入左边子树,再与左边子树的根节点比较,直到找到它要放的位置,

否则进入右子树,进行上述操作

2.源程序代码

#include

#include

typedefstructnode//二叉排序树的结点类型

{

intkey;

structnode*lchild,*rchild;

}BSTNode;

typedefBSTNode*BSTree;

voidinsertBST(BSTree*prt,intkey)

{

BSTNode*f,*p=*prt;

while(p)//判断数据插入的位置

{

if(p->key==key)//树中已有此节点无需插入

return;

f=p;

p=(key<(p->key))?

p->lchild:

p->rchild;

}

p=(BSTNode*)malloc(sizeof(BSTNode));//建立新的结点

p->key=key;

p->lchild=p->rchild=NULL;

if(*prt==NULL)

*prt=p;

elseif(keykey)

f->lchild=p;

else

f->rchild=p;

}

BSTreecreateBST(void)

{

BSTreeT=NULL;

intkey;

printf("请输入根节点\n");//先建立一个根节点

scanf("%d",&key);

while(key)

{

insertBST(&T,key);

printf("请输入一个数据以0结束:

");

scanf("%d",&key);

}

returnT;

}

voidinorder(BSTreeT)//中序遍历

{

if(T)

{

inorder(T->lchild);

printf("%3d",T->key);

inorder(T->rchild);

}

}

voidmain()

{

BSTreeT;

T=createBST();

printf("中序遍历结果:

\n");

inorder(T);

}

3.实验结果

三.个人小结

通过这次实验,我对于各类查找的算法都有了很清晰的认识,在实验的过程中我深刻地体会到了作为一个合格的程序员,不仅仅要理解算法还要学会对其灵活运用,一定要多动手,在实践的过程中你会遇到各种意想不到的意外,当运用自己的办法把问题都解决好了之后,自己的编程能力也有了一定的提高。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

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

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