数据结构查找实验报告.docx

上传人:b****8 文档编号:9848247 上传时间:2023-02-07 格式:DOCX 页数:22 大小:181.58KB
下载 相关 举报
数据结构查找实验报告.docx_第1页
第1页 / 共22页
数据结构查找实验报告.docx_第2页
第2页 / 共22页
数据结构查找实验报告.docx_第3页
第3页 / 共22页
数据结构查找实验报告.docx_第4页
第4页 / 共22页
数据结构查找实验报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

数据结构查找实验报告.docx

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

数据结构查找实验报告.docx

数据结构查找实验报告

实验报告

课程

数据结构及算法

实验项目

8.查找

成绩

专业班级

***

指导教师

***

姓名

***

学号

***

实验日期

***

实验八查找

一、实验目的

1、掌握顺序表查找中不同查找方法的查找思想,并能用C/C++语言实现。

2、掌握树表查找中二叉排序树查找、平衡二叉树查找的查找思想,并能用C/C++语言实现。

3、掌握Hash表查找中的查找思想,并能用C/C++语言实现。

4、能够针对具体实际,灵活选用适宜的查找方法。

二、实验环境

PC微机,Windows,DOS,TurboC或VisualC++

三、实验内容

1、二叉排序树查找

(1)问题描述

查找是计算机操作中的一种重要应用技术,查找的方法有许多,不同的查找方法有不同的查找效率,而二叉排序树查找就是效率较高的查找方法之一。

所谓二叉排序树,就是指将原来已有数据根据大小构成一棵二叉树,二叉树中的所有结点数据满足一定的大小关系,所有左子树中的结点均比根结点小,所有右子树中的结点均比根结点大。

二叉排序树查找是指按照二叉排序树中结点的关系进行查找,查找关键字首先同树根结点进行比较,如果相等则查找成功;如果比根结点小,则在左子树中查找;如果比根结点大,则在右子树中进行查找。

这种查找方法可以快速缩小查找范围,大大减少了查找关键字的比较次数,从而提高了查找效率。

(2)基本要求

编程实现时,体现查找的全过程,即二叉排序树的创建、查找关键字的输入、查找关键字的查找、查找结果的输出等。

(3)算法实现

#include

#include

voidGetemptylist();//建立空树

voidGetlist();//建立二叉排序树

voidSortL();//排序

voidConnectlist();//结点连接处理

voidLookup();//查找

 

typedefstructlist

{

intdata;

structlist*left;

structlist*right;

}JD;

JD*head;

intL[20];

intsize;

intnum;

intmain()

{

Getemptylist();

Getlist();

Lookup();

return0;

}//+*

voidGetemptylist()

{

printf("建立空树:

\n");

head=(JD*)malloc(sizeof(JD));

head->left=NULL;

head->right=NULL;

if(!

head)

{

printf("建立失败!

\n");

exit(-1);

}

else

{

printf("建立成功!

\n");

}

}

voidGetlist()

{

inti;

printf("建立二叉排序树:

\n");

printf("请输入元素个数:

");

scanf("%d",&size);

printf("请输入元素:

");

for(i=0;i

{

scanf("%d",&(L[i]));

}

SortL();

printf("二叉排序树建立中。

\n");

Connectlist();

}

voidSortL()

{

inti,j;

intmin;

for(i=0;i

{

min=L[i];

for(j=i+1;j

{

if(L[j]

{

min=L[j];

L[j]=L[i];

L[i]=min;

}

}

}

printf("排序后:

");

for(i=0;i

{

printf("%d",L[i]);

}

printf("\n");

}

voidConnectlist()

{

intlow,high,mid;

inti;

JD*p,*q;

p=(JD*)malloc(sizeof(JD));

p->left=NULL;

p->right=NULL;

low=0;

high=size;

mid=(low+high)/2;

head->data=L[mid];

q=head;

for(i=0;i

{

q=head;

A1:

if(L[i]data)

{

if(q->left==NULL)

{

p->data=L[i];

q->left=p;

p=(JD*)malloc(sizeof(JD));

p->left=NULL;

p->right=NULL;

}

else

{

q=q->left;

gotoA1;

}

}

else

{

if(q->right==NULL)

{

p->data=L[i];

q->right=p;

p=(JD*)malloc(sizeof(JD));

p->left=NULL;

p->right=NULL;

}

else

{

q=q->right;

gotoA1;

}

}

}

if(head->left==NULL&&head->right==NULL)

{

printf("二叉排序树建立失败!

\n");

}

else

{

printf("二叉排序树建立成功!

\n");

}

}

voidLookup()

{

inti;

JD*q;

printf("请输入查找元素:

");

scanf("%d",&num);

q=head;

for(;;)

{

if(num==q->data)

{

printf("查找成功,此元素为:

%d,地址为:

%d\n",q->data,q);

break;

}

else

{

if(numdata)

{

if(q->left==NULL)

{

printf("查找失败,无此元素\n");

break;

}

else

{

q=q->left;

}

}

else

{

if(q->right==NULL)

{

printf("查找失败,无此元素\n");

break;

}

else

{

q=q->right;

}

}

}

}

}

(4)运行截图

 

2、通讯录的管理

(1)问题描述

试编程完成通讯录的一般性管理工作,如通讯录中记录的增加、修改、查找、删除、输出等功能。

每个记录包含姓名、电话号码、住址等个人基本信息。

(2)基本要求

将建立的通讯录以磁盘文件的形式存储,所有的通讯录管理均以文件操作的方式进行。

在查找通讯录中的记录时,以记录的“姓名”为查找关键字进行查找。

由于“姓名”是字符串类型的数据,其查找过程比整形关键字的查找过程要复杂,关键字比较过程可调用字符串函数,也可以自己实现其比较过程。

(3)算法实现

#include

#include

#include

#definesize50

voidGetemptylist();//建立空表

voidIncrease();//增加

voidModify();//修改

voidLookup();//查找

voidDelete();//删除

voidSee();//查看

voidformat();//格式化

typedefstructlist

{

charname[size];//姓名

chartelenum[size];//电话

charaddress[size];//地址

}JD;

JDUser[size];

intmain()

{

inta;

Getemptylist();

A1:

printf("请选择操作:

\n1.增加2.修改\n3.查找4.删除\n5.查看6.退出\n7.格式化\n");

scanf("%d",&a);

switch(a)

{

case1:

Increase();break;//增加

case2:

Modify();break;//修改

case3:

Lookup();break;//查找

case4:

Delete();break;//删除

case5:

See();break;//查看

case6:

exit

(1);break;//退出

case7:

format();break;

default:

printf("inputerror!

\n");

}

gotoA1;

return0;

}//+*

voidGetemptylist()

{

printf("建立空表:

\n");

if(!

User)

{

printf("建立失败!

\n");

exit(-1);

}

else

{

printf("建立成功!

\n");

}

}

voidIncrease()

{

FILE*fp;

inti=0;

printf("请输入姓名:

");

scanf("%s",User[i].name);

printf("请输入电话:

");

scanf("%s",User[i].telenum);

printf("请输入地址:

");

scanf("%s",User[i].address);

fp=fopen("D:

\\通讯录.txt","a");

fprintf(fp,"%6s%11s%6s",User[i].name,User[i].telenum,User[i].address);

fclose(fp);

printf("添加成功!

\n");

}

voidModify()

{

FILE*fp;

chara[size];

inti,j;

intx=1;

fp=fopen("D:

\\通讯录.txt","r");

for(i=0;i<5;i++)

{

fscanf(fp,"%6s%11s%6s",User[i].name,User[i].telenum,User[i].address);

}

fclose(fp);

printf("请输入需要修改的联系人的姓名:

");

scanf("%s",a);

for(i=0;i<5;i++)

{

x=1;

for(j=0;j

{

if(a[j]!

=User[i].name[j])

{

x=0;

break;

}

}

if(x==1)

{

printf("请输入修改后的姓名:

");

scanf("%s",User[i].name);

printf("请输入修改后的电话:

");

scanf("%s",User[i].telenum);

printf("请输入修改后的地址:

");

scanf("%s",User[i].address);

printf("修改成功!

修改后:

\n");

printf("姓名电话地址\n");

printf("%6s%11s%6s\n",User[i].name,User[i].telenum,User[i].address);

break;

}

}

if(x==1)

{

fp=fopen("D:

\\通讯录.txt","w");

for(i=0;i<5;i++)

{

fprintf(fp,"%6s%11s%6s",User[i].name,User[i].telenum,User[i].address);

}

fclose(fp);

}

if(x==0)

{

printf("无此联系人!

\n");

}

}

voidLookup()

{

FILE*fp;

chara[size];

inti,j;

intx=1;

fp=fopen("D:

\\通讯录.txt","r");

for(i=0;i<5;i++)

{

fscanf(fp,"%6s%11s%6s",User[i].name,User[i].telenum,User[i].address);

}

fclose(fp);

printf("请输入想要查找的联系人的姓名:

");

scanf("%s",a);

for(i=0;i<5;i++)

{

x=1;

for(j=0;j

{

if(a[j]!

=User[i].name[j])

{

x=0;

break;

}

}

if(x==1)

{

printf("查找成功!

\n");

printf("姓名电话地址\n");

printf("%6s%11s%6s\n\n",User[i].name,User[i].telenum,User[i].address);

break;

}

}

if(x==0)

{

printf("无此联系人!

\n");

}

}

voidDelete()

{

FILE*fp;

JDmax[size];

chara[size];

inti,j,k;

intx=1;

fp=fopen("D:

\\通讯录.txt","r");

for(i=0;i<5;i++)

{

fscanf(fp,"%6s%11s%6s",User[i].name,User[i].telenum,User[i].address);

}

fclose(fp);

printf("请输入想要删除的联系人的姓名:

");

scanf("%s",a);

for(i=0;i<5;i++)

{

x=1;

for(j=0;j

{

if(a[j]!

=User[i].name[j])

{

x=0;

break;

}

}

if(x==1)

{

k=0;

for(j=0;j

{

if(j==i)

{

j++;

}

strcpy(max[k].name,User[j].name);

strcpy(max[k].address,User[j].address);

strcpy(max[k].telenum,User[j].telenum);

k++;

}

for(j=0;j

{

strcpy(User[j].name,max[j].name);

strcpy(User[j].address,max[j].address);

strcpy(User[j].telenum,max[j].telenum);

}

printf("删除成功!

\n");

break;

}

}

if(x==1)

{

fp=fopen("D:

\\通讯录.txt","w");

for(i=0;i<5;i++)

{

fprintf(fp,"%6s%11s%6s",User[i].name,User[i].telenum,User[i].address);

}

fclose(fp);

}

if(x==0)

{

printf("无此联系人!

\n");

}

}

voidSee()

{

FILE*fp;

inti;

fp=fopen("D:

\\通讯录.txt","r");

for(i=0;i<5;i++)

{

fscanf(fp,"%6s%11s%6s",User[i].name,User[i].telenum,User[i].address);

}

fclose(fp);

printf("姓名电话地址\n");

for(i=0;i<5;i++)

{

printf("%6s%11s%6s\n",User[i].name,User[i].telenum,User[i].address);

}

}

voidformat()

{

FILE*fp;

inta;

printf("确定格式化?

(1.确定2.取消)\n");

scanf("%d",&a);

if(a==1)

{

fp=fopen("D:

\\通讯录.txt","w");

fclose(fp);

printf("格式化成功!

\n");

}

elseif(a==2)

{

main();

}

else

{

printf("inputerror!

\n");

}

}

(4)运行截图

 

4、实验总结

千变万化,实用性强。

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

当前位置:首页 > 考试认证 > 交规考试

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

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