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

上传人:b****2 文档编号:1538596 上传时间:2022-10-23 格式:DOC 页数:9 大小:213KB
下载 相关 举报
《数据结构》实验报告查找.doc_第1页
第1页 / 共9页
《数据结构》实验报告查找.doc_第2页
第2页 / 共9页
《数据结构》实验报告查找.doc_第3页
第3页 / 共9页
《数据结构》实验报告查找.doc_第4页
第4页 / 共9页
《数据结构》实验报告查找.doc_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

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

《《数据结构》实验报告查找.doc》由会员分享,可在线阅读,更多相关《《数据结构》实验报告查找.doc(9页珍藏版)》请在冰豆网上搜索。

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

《数据结构》实验班级:

学号:

姓名:

实验四——查找

一、实验目的

1.掌握顺序表的查找方法,尤其是折半查找方法;

2.掌握二叉排序树的查找算法。

二、实验内容

1.建立一个顺序表,用顺序查找的方法对其实施查找;

2.建立一个有序表,用折半查找的方法对其实施查找;

3.建立一个二叉排序树,根据给定值对其实施查找;

4.对同一组数据,试用三种方法查找某一相同数据,并尝试进行性能分析。

三、实验预习内容

实验一包括的函数有:

typedefstruct,创建函数voidcreate(seqlist&L),输出函数voidprint(seqlistL),顺序查找intfind(seqlistL,intnumber),折半查找inthalffind(seqlistL,intnumber)

主函数main().

实验二包括的函数有:

结构体typedefstruct,插入函数voidinsert(bnode*&T,bnode*S),voidinsert1(bnode*&T),创建函数voidcreate(bnode*&T),查找函数bnode*search(bnode*T,intnumber),主函数main().

四、上机实验

实验一:

1.实验源程序。

#include

#defineN80

typedefstruct

{

intnumber;//关键字

charname[5];

charsex[2];

intage;

}record;

typedefstruct

{

recordstu[N];

intnum;//记录人数

}seqlist;

//建顺序表

voidcreate(seqlist&L)

{

inti;

L.num=0;

cout<<"请依次输入(输入学号为0认定为终止输入):

"<

cout<<"学号"<<"\t姓名"<<"\t性别"<<"\t年龄"<

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<

cin>>L.stu[++i].number;

}

}

//输出学生信息

voidprint(seqlistL)

{

inti;

cout<<"学生基本信息为:

"<

for(i=1;i<=L.num;i++)

cout<<"\t"<

}

//顺序查找

intfind(seqlistL,intnumber)

{

inti;

for(i=L.num;i>=0;i--)

if(L.stu[i].number==number)

returni;

}

//折半查找

inthalffind(seqlistL,intnumber)

{

inthigh=L.num,low=1,mid;

for(;low<=high;)

{

mid=(high+low)/2;

if(number==L.stu[mid].number)

returnmid;

else

if(number

high=mid-1;

else

low=mid+1;

}

return0;

}

voidmain()

{

inti,number;

seqlistL;

create(L);

print(L);

cout<<"折半查找:

"<

cout<<"输入学生学号:

";

cin>>number;

if((i=halffind(L,number))!

=0)

cout<<"\t"<

else

cout<<"失败!

"<

cout<<"顺序查找:

"<

cout<<"输入学生学号:

";

cin>>number;

if((i=find(L,number))!

=0)

cout<<"\t"<

else

cout<<"失败!

"<

}

实验二:

#include

typedefstruct

{

intnumber;//关键字

charname[5];

charsex[2];

intage;

}record;

typedefstructnode

{

recordinf;

structnode*lchild,*rchild;

}bnode;

voidinsert(bnode*&T,bnode*S)

{

if(!

T)

T=S;

else

if(S->inf.numberinf.number)

insert(T->lchild,S);

else

insert(T->rchild,S);

}

voidinsert1(bnode*&T)

{

intflag=1;intnumber;bnode*u;charctinue;

for(;flag==1;)

{

cout<<"依次输入(学号为0默认为结束输入):

"<

cout<<"学号"<<"\t姓名"<<"\t性别"<<"\t年龄"<

cin>>number;

while(number)

{

u=newbnode;

u->inf.number=number;

cin>>u->inf.name>>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;

else

flag=0;

}

}

voidcreate(bnode*&T)

{

bnode*u;

intnumber;

T=NULL;

cout<<"依次输入(学号为0默认为结束输入):

"<

cout<<"学号"<<"\t姓名"<<"\t性别"<<"\t年龄"<

cin>>number;

while(number)

{

u=newbnode;

u->inf.number=number;

cin>>u->inf.name>>u->inf.sex>>u->inf.age;

u->lchild=u->rchild=NULL;

insert(T,u);

cin>>number;

}

}

bnode*search(bnode*T,intnumber)

{

if(T==NULL||T->inf.number==number)

returnT;

else

if(T->inf.number>number)

returnsearch(T->lchild,number);

else

returnsearch(T->rchild,number);

}

voidmain()

{

intnumber,flag=1,choice;charctinue;

bnode*T,*p;

for(;flag==1;)

{

cout<<"\t1.建立二叉排序树"<<"\n\t2.插入学生信息"<<"\n\t3.查找学生信息"<

cout<<"选择:

";

cin>>choice;

switch(choice)

{

case1:

{create(T);cout<<"成功建立!

"<

case2:

{insert1(T);cout<<"插入成功!

"<

case3:

{cout<<"输入待查学生的学号:

";cin>>number;p=search(T,number);

if(p)

cout<inf.number<<"\t"<inf.name<<"\t"<inf.sex<<"\t"<inf.age<

else

cout<<"查找失败!

"<

}

cout<<"Continue(Y/N):

";

cin>>ctinue;

if(ctinue=='y'||ctinue=='y')

flag=1;

else

flag=0;

}

}

2.实验结果(截图)。

实验一:

开始界面:

插入数据界面:

查找信息的界面;

实验二:

开始界面:

建立二叉树:

插入学生的信息:

查找学生信息:

再次插入学生信息:

五、实验总结(实验过程中出现的问题、解决方法、结果或其它)

在实验一中:

创建的学生信息包含四个方面:

学号,姓名,性别,年龄。

要分别定义四个数组来保存它们。

其中要将学生的学号定义为查找的关键字。

顺序查找按学号就可以,在折半查找中,我们需要定义high和low来保存每次比较完之后的数组的下标。

在实验二中:

二叉排序树中的创建树,输出一个要插入的学生信息,学号为主要关键字进行插入,首先进行比较在决定是插在左子树还是右子树。

主要问题是如何一次保存学生的四个信息?

这就要求在输入学生信息时候,要定义学号为关键字输入。

在输入学生信息时候仍要调用插入函数对学生信息进行保存。

8

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1