当前位置:文档之家› 《数据结构》实验报告查找

《数据结构》实验报告查找

实验四——查找一、实验目的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<iostream.h>#define N 80typedef struct{int number; //关键字char name[5];char sex[2];int age;}record;typedef struct{record stu[N];int num;//记录人数}seqlist;//建顺序表void create(seqlist & L){int i;L.num=0;cout<<"请依次输入(输入学号为0认定为终止输入):"<<endl;cout<<"学号"<<"\t姓名"<<"\t性别"<<"\t年龄"<<endl;cin>>L.stu[1].number;for(i=1;L.stu[i].number!=0;){cin>>L.stu[i].name>>L.stu[i].sex>>L.stu[i].age;L.num++;cout<<endl;cin>>L.stu[++i].number;}}//输出学生信息void print(seqlist L){int i;cout<<"学生基本信息为:"<<endl;for(i=1;i<=L.num;i++)cout<<"\t"<<L.stu[i].number<<"\t"<<L.stu[i].name<<"\t"<<L.stu[i].sex<<"\t"<<L.stu[i].age<< endl;}//顺序查找int find(seqlist L,int number){int i;for(i=L.num;i>=0;i--)if(L.stu[i].number==number)return i;}//折半查找int halffind(seqlist L,int number){int high=L.num,low=1,mid;for(;low<=high;){mid=(high+low)/2;if(number==L.stu[mid].number)return mid;elseif(number<L.stu[mid].number)high=mid-1;elselow=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"<<L.stu[i].number<<"\t"<<L.stu[i].name<<"\t"<<L.stu[i].sex<<"\t"<<L.stu[i].age<< endl;elsecout<<"失败!"<<endl;cout<<"顺序查找:"<<endl;cout<<"输入学生学号:";cin>>number;if((i=find(L,number))!=0)cout<<"\t"<<L.stu[i].number<<"\t"<<L.stu[i].name<<"\t"<<L.stu[i].sex<<"\t"<<L.stu[i].age<< endl;elsecout<<"失败!"<<endl;}实验二:#include<iostream.h>typedef struct{int number; //关键字char name[5];char sex[2];int age;}record;typedef struct node{record inf;struct node *lchild,*rchild;}bnode;void insert(bnode * & T,bnode * S){if(!T)T=S;elseif(S->inf.number<T->inf.number)insert(T->lchild,S);elseinsert(T->rchild,S);}void insert1(bnode * & T){int flag=1; int number; bnode * u; char ctinue;for(;flag==1;){cout<<"依次输入(学号为0默认为结束输入):"<<endl;cout<<"学号"<<"\t姓名"<<"\t性别"<<"\t年龄"<<endl;cin>>number;while(number){u=new bnode;u->inf.number=number;cin>>u->>>u->inf.sex>>u->inf.age;u->lchild=u->rchild=NULL;insert(T,u);cin>>number;}cout<<"继续插入(Y/N):";cin>>ctinue;if(ctinue=='y'||ctinue=='y')flag=1;elseflag=0;}}void create(bnode * & T){bnode * u;int number;T=NULL;cout<<"依次输入(学号为0默认为结束输入):"<<endl;cout<<"学号"<<"\t姓名"<<"\t性别"<<"\t年龄"<<endl;cin>>number;while(number){u=new bnode;u->inf.number=number;cin>>u->>>u->inf.sex>>u->inf.age;u->lchild=u->rchild=NULL;insert(T,u);cin>>number;}}bnode * search(bnode * T,int number){if(T==NULL||T->inf.number==number)return T;elseif(T->inf.number>number)return search(T->lchild,number);elsereturn search(T->rchild,number);}void main(){int number,flag=1,choice; char ctinue;bnode * T,*p;for(;flag==1;){cout<<"\t1.建立二叉排序树"<<"\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->inf.number<<"\t"<<p-><<"\t"<<p->inf.sex<<"\t"<<p->inf.age<<endl;elsecout<<"查找失败!"<<endl;};break;}cout<<"Continue(Y/N):";cin>>ctinue;if(ctinue=='y'||ctinue=='y')flag=1;elseflag=0;}}2.实验结果(截图)。

相关主题