数据结构实验报告-静态查找表中的查找

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

数据结构实验

实验一静态查找表中的查找

一、实验目的:

1、理解静态查找表的概念

2、掌握顺序查找和折半查找算法及其实现方法

3、理解顺序查找和折半查找的特点,学会分析算法的性能

二、实验内容:

1、按关键字从小到大顺序输入一组记录构造查找表,并且输出该查找表;

2、给定一个关键字值,对所构造的查找表分别进行顺序查找和折半查找,输出查找的结果以及查找过程中“比较”操作的执行次数。

三、实验要求:

1、查找表的长度、查找表中的记录和待查找的关键字值要从终端输入;

2、具体的输入和输出格式不限;

3、算法要具有较好的健壮性,对错误操作要做适当处理;

4、输出信息中要标明所采用的查找方法类型。

实验二基于二叉排序树的查找

一、实验目的:

1、理解动态查找表和二叉排序树的概念

2、掌握二叉排序树的构造算法及其实现方法

3、掌握二叉排序树的查找算法及其实现方法

二、实验内容:

1、输入一组记录构造一颗二叉排序树,并且输出这棵二叉排序树的中序序列;

2、给定一个关键字值,对所构造的二叉排序树进行查找,并输出查找的结果。

三、实验要求:

1、二叉排序树中的记录和待查找的关键字值要从终端输入;

2、输入的记录格式为(整数,序号),例如(3, 2)表示关键字值为3,输入序号为2的记录;

3、算法要具有较好的健壮性,对错误操作要做适当处理。

四、程序实现:

(1)实现顺序查找表和折半查找表:

#include

#define MAX_LENGTH 100

typedef struct

{

int key[MAX_LENGTH];

int length;

}stable;

int seqserch(stable ST,int key,int &count)

{

int i;

for(i=ST.length;i>0;i--)

{

count++;

if(ST.key[i]==key)

return i;

}

return 0;

}

int binserch(stable ST,int key,int &count)

{

int low=1,high=ST.length,mid;

while(low<=high)

{

count++;

mid=(low+high)/2;

if(ST.key[mid]==key)

return mid;

else if(key

high=mid-1;

else

low=mid+1;

}

return 0;

} main()

{

stable ST1;

int

a,b,k,x,count1=0,count2=0,temp=0;

ST1.length=0;

printf("请按从小到大的顺序输入查找表数据:(-1代表结束!)\n");

for(a=0;a

{

scanf("%d",&temp);

if(temp!=-1)

{

ST1.key[a]=temp;

ST1.length++;

}

else

break;

}

printf("输入数据为:\n");

for(b=0;b

{

printf("%d ",ST1.key[b]);

}

printf("\n请输入要查找的数据:");

scanf("%d",&k);

a=seqserch(ST1,k,count1)+1;

printf("\n顺序查找:该数据的位置在第:%d个\n",a);

printf("查找次数为:%d\n\n",count1-1);

a=binserch(ST1,k,count2)+1;

printf("折半查找:该数据的位置在第:%d个\n",a);

printf("查找次数为:%d\n",count2-1);

}

(2)二叉排序树的查找:

#include #include typedef struct node {

int data;

int key;

struct node *left,*right;

}bitnode,*bittree;

void serchbst(bittree T,bittree *F,bittree *C,int data)

{

while(T!=NULL)

{

if(T->data==data)

{

*C=T;

break;

}

else if(datadata)

{

*F=T;

T=T->left;

}

else

{

*F=T;

T=T->right;

}

}

return 0;

}

int insertbst(bittree *T,int key,int data) {

bittree F=NULL,C=NULL,s;

serchbst(*T,&F,&C,data);

if(C!=NULL) return 0;

s=(bittree)malloc(sizeof(bitnode));

s->data=data;

s->key=key;

s->left=s->right=NULL;

if(F==NULL) *T=s;

else if(datadata)

F->left=s;

else

F->right=s;

return 1; }

void creatbst(bittree *T)

{

int key,data;*T=NULL;

printf("请输入数据以构造二叉排序树:(数据格式为:m n (-1000,-1000)代表结束)\n");

scanf("%d%d",&key,&data);

while(key!=-1000 || data!=-1000)

{

insertbst(T,key,data);

scanf("%d%d",&key,&data);

}

}

void midTraverse(bittree T)

{

if(T!=NULL)

{

midTraverse(T->left);

printf("(%d,%d)

",T->key,T->data);

midTraverse(T->right);

}

}

main()

{

bittree

T=NULL,C=NULL,F=NULL;

int key,data,temp;

creatbst(&T);

printf("此二叉树的中序序列为:");

midTraverse(T);

printf("\n请输入要查找的关键字:");

scanf("%d",&data);

serchbst(T,&F,&C,data);

printf("此关键字的数据为:%d\n",C->key);

}

相关文档
最新文档