数据结构查找算法的实现实验报告
数据结构实验报告-查找算法
《数据结构》 第八次实验报告
学生姓名 学生班级 学生学号 指导老师
重庆邮电大学计算机学院
一、实验
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
1) 有序表的二分查找
?建立有序表,然后进行二分查找
2) 二叉排序树的查找
?建立二叉排序树,然后查找
二、需求
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果xa[n/2],则只要在数组a的左半部分继续搜索x,如果xa[nmin)/2
while(min=max)
mid=(min+max)/2
if mid=des then
return mid
elseif mid des then
max=mid-1
else
min=mid+1
return max
折半查找法也称为二分查找法,它
充分利用了元素间的次序关系,采用分
治策略,可在最坏的情况下用O(log n)
完成搜索任务。它的基本思想是,将n
个元素分成个数大致相同的两半,取
a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如 果xa[n/2],则
我们只要在数组a的左半部继续搜索x
(这里假设数组元素呈升序排列)。如果
xa[n/2],则我们只要在数组a的右 半部
继续搜索x。
三、概要
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
1、顺序查找,在顺序表R[0..n-1]中
查找关键字为k的记录,成功时返回找
到的记录位置,失败时返回-1,具体的算
法如下所示: int SeqSearch(SeqList R,int
n,KeyType k)
{
} int i=0;
while(in&&R[i].key!=k) {} if(i=n)
{ } printf(%d,R[i].key); return i; return -1;
else printf(%d,R[i].key); i++;
2、二分查找,在有序表R[0..n-1]中
进行二分查找,成功时返回记录的位置,
失败时返回-1,具体的算法如下:
int BinSearch(SeqList R,int n,KeyType k)
{
}
return -1;
} int low=0,high=n-1,mid,count=0; while(lo(来自:WWw.XieLw.com 写 论
文 网:数据结构查找算法的实现实验报
告)w=high) { mid=(low+high)/2; printf(第%d次查找:在[ %d ,%d]中找到
元素
R[%d]:%d\n ,++count,low,high,mid,R[mid].key); if(R[mid].key==k) return mid; high=mid-1; low=mid+1; if(R[mid].keyk) else
四、详细设计
源代码:
#includestdio.h
#includestdlib.h
static int a[1024],count=0;
void Find1(int low,int high,int x)
{
int mid;
if(low=high)
{
mid=(low+high)/2;
count++;
if(a[mid]x)Find1(low,mid-1,x);
else if(a[mid]x)Find1(mid+1,high,x);
else printf(\n查é找ò到?元a素?位?
置?为a%d,?查é找ò次?数簓为a%d。
,,mid,count);}
else printf(\n查é找ò失骸?败悒?,?
查é找ò次?数簓为a%d。,,count);
}
void Find2(int low,int high,int x)
{
int mid;
if(low=high)
{
mid=(low+high)/2;
count++;
if(a[mid]x)Find2(low,mid-1,x);
else if(a[mid]x)Find2(mid+1,high,x);
else printf(\n查é找ò到?元a素?位?
置?为a%d,?查é找ò次?数簓为a%d。
,,mid,count);}
else printf(\n查é找ò失骸?败悒?,?
查é找ò次?数簓为a%d。,,count);
}
int main()
{
int n,x;
printf(请?输?入?元a素?个?数簓:);
scanf(%d,&n);
printf(\n请?按恪?从洙?高?到?低台?或ò从洙?低台?到?高?顺3序ò输?入?各
?元a素?(以?空?格?隔?开a):\n\n);
for(int i=1;i=n;i++)
scanf(%d,&a[i]);
printf(\n请?输?入?要癮查é找ò的?元a素?:阰);
scanf(%d,&x);
if(a[1]=a[n])Find1(1,n,x);
else Find2(1,n,x);
printf(\n\n);
system(pause);
}
五、心得
体会
针灸治疗溃疡性结肠炎昆山之路icu常用仪器的管理名人广告失败案例两会精神体会
通过这次在实现顺序和二分查找算
法的过程中,让我对顺序和二分查找算
法有了更多的了解。查找根据给定的某
个值,在查找表中确定一个其关键字等
于给定值的数据元素或(记录)的操作,应用十分广泛。顺序查找是一种最简单的查找方法。它的基本思路是:从表的一端开始,顺序扫描线性表,依次将扫描到的关键字和给定值k相比较,若当前扫描到的关键字与k相等,则查找成功;若扫描结束后,仍未找到关键字等于k的记录,则查找失败。二分查找也称为折半查找
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
线性表中的结点必须己按关键字值的递增或递减顺序排列。它首先用要查找的关键字k与中间位置的结点的关键字相比较,这个中间结点把线性表分成了两个子表,若比较结果相等则查找完成;若不相等,再根据k与该中间结点关键字的比较大小确定下一步查找哪个子表,这样递归进行下去,直到找到满足条件的结点或者该线性表中没有这样的结点。在学习过程中,善于发现,会找到更多的捷径。
六、附录
运行结果截图。
篇二:数据结构实验报告 实验五 查找算法
昆明理工大学信息工程与自动化学院学生实验报告
( 201 —201 学年 第 一 学期 )
课程名称:数据结构开课实验室: 年 月 日
一.实验内容:
查找算法,其中线性表的查找包括顺序查找,二分查找,分块查找;树表的查找包括二叉排序树等;还有散列表的查找等等。
二.实验目的:
1.掌握各种查找算法理解和实现;
2.增强上机编程调试能力;
三.主要程序代码分析:
typedef struct
{
int Key; //关键项
}ElemType;
int Search_Seq(SSTable ST,int Key)
//顺序查找
{
int i;
ST.elem[0].Key=Key; //设置监视哨
for(i=ST.length;ST.elem[i].Key!=Key;i-
-);
return i;
}
int Search_Bin(SSTable ST,int Key)//
在有序表中进行二分查找
{
int low=1;
int high=ST.length; //置查找区间的上、下届初值
int mid;
count=0;
while(low=high)//当前查找区间非空
{
count++;
mid=(low+high)/2;
if(ST.elem[mid].Key==Key)
return mid; //查找成功,返回
else if(KeyST.elem[mid].Key)
high=mid-1; //缩小查找区间为左子表
else
low=mid+1;//缩小查找区间为右子表
}
return (-1); //查找失败
}
四.程序运行结果:
五.实验总结:
查找又称检索,它也是数据处理中经常使用的一种重要的运算,在线性表上的查找方法有顺序查找,二分查找和分块查找。顺序查找是一种最简单的查找方法。它的基本思想是:从表的一端开始,顺序扫描线性表,依次将扫描到的结点关键字和定值K相比较,若当前扫描到的结点关键字与K相等,则查找成功;若扫描结束后仍未找到关键字等于K的结点,则查找失败。对于二分查找,它要求线性表是有序表,并且要用向量作为表的存储结构。
我们在以后的学习中也要不断地熟悉这些查找方法,因为它们在数据处理中会经常用到,只有将它们掌握好,而且我们还要不断地练习,这样我们的编程能力才会提高,有更大的进步。
篇三:数据结构实验报告
本科生实验报告
(五)
姓名:
学院:
专业:
班级:
实验课程名称:数据结构实验
实验日期:2013年6月19 日
指导教师及职称:
实验成绩:
开课时间:2012~2013 学年 第二
学期
实验管理中心印制