冒泡排序和二分查找实验报告Word下载.docx
《冒泡排序和二分查找实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《冒泡排序和二分查找实验报告Word下载.docx(8页珍藏版)》请在冰豆网上搜索。
DynamicSearchTable
{
数据对象
D:
D是具有相同特性的数据元素的集合。
各个数据元素均含有类型相同,可唯一标识数据元素的关键字
数据关系R:
数据元素同属一个集合。
基本操作P:
InitDSTable(&
DT);
操作结果:
构造一个空的动态查找表DT。
DestroyDSTable(&
DT)
初始条件:
动态查找表DT存在。
销毁动态查找表DT。
SearchDSTable(DT,key);
动态查找表DT存在,key为和关键字类型相同的给定值。
若DT中存在其关键字等于key的数据元素,则函数值为该元素的值或在表中的位置,否则为“空”。
InsertDSTable(&
DT,e);
动态查找表DT存在,e为待插入的数据元素。
若DT中不存在其关键字等于e.key的数据元素,则插入e到DT。
DeleteDSTable(&
DT,key);
若DT中存在其关键字等于key的数据元素,则删除之。
TraverseDSTable(DT,visit());
动态查找表DT存在,visit是对结点操作的应用函数。
按某种次序对DT的每个结点调用函数visit()一次且至多一次,一旦visit()失败,则操作失败。
}ADT
DynamicSearchTable
3.2存储结构的定义;
二分查找
#definemaxn100
typedefstruct
intkey;
chardata[10];
}NodeType;
typedefNodeTypeSeqList[maxn];
冒泡排序
#definemaxn20
}RecType;
3.3基本操作实现:
intBinSearch(SeqListR,intn,intk)
intl=0,r=n-1,mid,count=0;
while(l<
=r)
{
mid=(l+r)2;
printf("
第%d次比较:
在[%d,%d]中比较元素R[%d]:
%d\n"
++count,l,r,mid,R[mid].key);
if(R[mid].key==k)
returnmid;
}
elseif(R[mid].key>
k)
r=mid-1;
else
l=mid+1;
return-1;
}
voidBubbleSort(RecTypeR[],intn)
inti,j,k;
RecTypetemp;
for(i=0;
i<
n-1;
++i)
for(j=n-1;
j>
i;
--j)
if(R[j].key<
R[j-1].key)
temp=R[j];
R[j]=R[j-1];
R[j-1]=temp;
i=%d,冒出的最小关键字:
%d,结果为:
"
i,R[i].key);
for(k=0;
k<
n;
++k)
%2d"
R[k].key);
\n"
);
3.4解题思路:
二分查找:
因为原本便是顺序表,是递增序列,所以在一个区间中,我们只要每次判断中间节点和被查找的关键字的大小关系,就可以判断被查找的节点在那一段区间了,然后再进行二分即可。
冒泡排序:
通过一次一次的交换,把无序序列中关键字最小的节点的值交换到前面即可。
3.5解题过程:
实验源代码如下:
3.5.1二分查找
#include<
stdio.100
intmain()
SeqListR;
intk=9;
inta[]={},i,n=10;
R[i].key=a[i];
关键字序列:
%d"
R[i].key);
查找%d的比较过程如下:
k);
if((i=BinSearch(R,n,k))!
=-1)
元素%d的位置是:
%d\n"
k,i);
元素%d不在表中\n"
return0;
3.5.2冒泡排序
stdio.20
inti,k,n=10;
inta[]={};
RecTypeR[maxn];
i<
初始关键字:
R[i].key);
BubbleSort(R,n);
最后结果:
四实验结果