实验四——查找
一、实验目的
1.掌握顺序表的查找方法,尤其是折半查找方法;
2.掌握二叉排序树的查找算法。
二、实验内容
1.建立一个顺序表,用顺序查找的方法对其实施查找;
2.建立一个有序表,用折半查找的方法对其实施查找;
3.建立一个二叉排序树,根据给定值对其实施查找;
4.对同一组数据,试用三种方法查找某一相同数据,并尝试进行性能分析。
三、实验预习内容
实验一包括的函数有:typedef struct ,创建函数void create(seqlist & L),输出函数void print(seqlist L),顺序查找int find(seqlist L,int number),折半查找int halffind(seqlist L,int number)
主函数main().
实验二包括的函数有:结构体typedef struct,插入函数void insert(bnode * & T,bnode * S),void insert1(bnode * & T),创建函数void create(bnode * & T),查找函数bnode * search(bnode * T,int number),主函数main().
四、上机实验
实验一:
1.实验源程序。
#include<>
#define N 80
typedef struct
{
int number; umber;
for(i=1;[i].number!=0;)
{
cin>>[i].name>>[i].sex>>[i].age;
++;
cout<<endl;
cin>>[++i].number;
}
}
umber<<"\t"<<[i].name<<"\t"<<[i].sex<<"\t"<<[i].age<<endl;
}
umber==number)
return i;
}
umber)
return mid;
else
if(number<[mid].number)
high=mid-1;
else
low=mid+1;
}
return 0;
}
void main()
{
int i,number;
seqlist L;
create(L);
print(L);
cout<<"折半查找:"<<endl;
cout<<"输入学生学号:";
cin>>number;
if((i=halffind(L,number))!=0)
cout<<"\t"<<[i].number<<"\t"<<[i].name<<"\t"<<[i].sex<<"\t"<<[i].age<<endl;
else
cout<<"失败!"<<endl;
cout<<"顺序查找:"<<endl;
cout<<"输入学生学号:";
cin>>number;
if((i=find(L,number))!=0)
cout<<"\t"<<[i].number<<"\t"<<[i].name<<"\t"<<[i].sex<<"\t"<<[i].age<<endl;
else
cout<<"失败!"<<endl;
}
实验二:
#include<>
typedef struct
{
int number; 立二叉排序树"<<"\n\t2.插入学生信息"<<"\n\t3.查找学生信息"<<endl;
cout<<"选择:";
cin>>choice;
switch(choice)
{
case 1:{create(T);cout<<"成功建立!"<<endl;};break;
case 2:{insert1(T);cout<<"插入成功!"<<endl;};break;
case 3:{cout<<"输入待查学生的学号:";cin>>number;p=search(T,number);
if(p)
cout<<p-><<"\t"<<p-><<"\t"<<p-><<"\t"<<p-><<endl;
else
cout<<"查找失败!"<<endl;};break;
}
cout<<"Continue(Y/N):";
cin>>ctinue;
if(ctinue=='y'||ctinue=='y')
flag=1;
else
flag=0;
}
}
2.实验结果(截图)。
实验一:
开始界面:
插入数据界面:
查找信息的界面;
实验二:
开始界面:
建立二叉树:
插入学生的信息:
查找学生信息:
再次插入学生信息:
五、实验总结(实验过程中出现的问题、解决方法、结果或其它)
在实验一中:创建的学生信息包含四个方面:学号,姓名,性别,年龄。
要分别定义四个数组来保存它们。
其中要将学生的学号定义为查找的关键字。
顺序查找按学号就可以,在折半查找中,我们需要定义high和low来保存每次比较完之后的数组的下标。
在实验二中:二叉排序树中的创建树,输出一个要插入的学生信息,学号为主要关键字进行插入,首先进行比较在决定是插在左子树还是右子树。
主要问题是如何一次保存学生的四个信息这就要求在输入学生信息时候,要定义学号为关键字输入。
在输入学生信息时候仍要调用插入函数对学生信息进行保存。