数据结构:查找实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构实验报告

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

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

一.实验目的:

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

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

二.实验内容

(-)实验题目一:写给出一个无序表A中采用顺序查找算法查找值为x的元素的算法

1.要点分析:

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

2.程序源代码:

#include

#define N 10

int search(int A[],int x,int n)

{

int i=0;

while(i

i++;

if(i>=n)

return -1;

else

return i;

}

void main()

{

int a[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.实验结果

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

1.要点分析:

首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。2.程序源代码:

#include

#include

#define maxnum 100

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

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

void plug(int *,int,int); //插入数据

void main()

{

int data[maxnum],m;

int insert=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();

}

int input(int * data)

{

int i,m;

printf("请输入该有序表的长度: \n");

scanf("%d",&m);

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

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

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

return m;

}

int search(int *data,int low,int high)

{

int mid;

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

return low;

else

{

mid=(low+high)/2;

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

return mid;

else if(*(data+mid)<*data)

low=mid+1;

else if(*(data+mid)>*data)

high=mid-1;

}

search(data,low,high);

}

void plug(int *data,int insert,int m) //移动并插入数据{

int i;

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

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

*(data+insert)=*data;

}

3.实验结果

(三)实验题目:设计一个算法,读入一串整数,构造其对应的二叉排序树

1.要点分析

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

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

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

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

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

二叉排序树建立说明:

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

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

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

2.源程序代码

#include

#include

typedef struct node //二叉排序树的结点类型

相关文档
最新文档