数据结构实验 查找
更新时间:2023-07-20 13:26:01 阅读量: 实用文档 文档下载
- 数据结构实验报告推荐度:
- 相关推荐
实验4查找
一、实验目的或任务
通过指导学生上机实践,对常用数据结构的基本概念及其不同的实现方法的理论得到进一步的掌握,并对在不同存储结构上实现不同的运算方式和技巧有所体会。
二、实验教学基本要求
1.了解实验目的及实验原理;
2.编写程序,并附上程序代码和结果图;
3.总结在编程过程中遇到的问题、解决办法和收获。
三、实验教学的内容或要求
1.编写函数,建立有序表,采用折半查找实现某一已知的关键字的查找(采用顺序表存储结构)
2.编写函数,随机产生一组关键字,利用二叉排序树的插入算法建立二叉排序树
3.编写函数,在以上二叉排序树中删除某一指定关键字元素
4.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法
四、实验类型或性质
验证性
五、实验开出要求
必做
六、实验所需仪器设备
1.计算机
2.相关软件(如C,C++,PASCAL,VC,DELPHI等等)
七、实验所用材料
计算机耗材
一、程序运行界面:
二、源程序
#define _CRT_SECURE_NO_W ARNINGS
#include<stdio.h>
#include<malloc.h>
#define MAXNODE 256
typedefstruct Node
{
int data;
struct Node *lchild,*rchild;
}NodeType;
typedefstruct
{
int num;
}datatype;
typedefstruct
{
datatype *data;
int length;
}S_TBL;
int SearchData(NodeType *T,NodeType **p,NodeType **q,int kx) {
int flag=0;
*q=T;
while(*q)
{
if(kx>(*q)->data)
{
*p=*q;
*q=(*q)->rchild;
}
else
{
if(kx<(*q)->data)
{
*p=*q;
*q=(*q)->lchild;
}
else
{
flag=1;
break;
}
}
}
return flag;
}
int InsertNode(NodeType **T,int kx)
{
int flag=0;
NodeType *p=*T,*q,*s;
if(!SearchData(*T,&p,&q,kx))
{
s=(NodeType*)malloc(sizeof(NodeType));
s->data=kx;
s->lchild=NULL;
s->rchild=NULL;
if(p==NULL)
{
*T=s;
}
else
{
if(kx>p->data)
{
p->rchild=s;
}
else
{
p->lchild=s;
}
}
flag=1;
}
return flag;
}
int DeleteNode(NodeType **T,int kx) {
int flag=0;
NodeType *p=*T,*q,*s,**f;
if(SearchData(*T,&p,&q,kx))
{
if(p==q)
{
f=T;
}
else
{
f=&(p->lchild);
if(kx>p->data)
{
f=&(p->rchild);
}
}
if(q->rchild==NULL)
{
*f=q->lchild;
}
else
{
if(q->lchild==NULL)
{
*f=q->rchild;
}
else
{
p=q->rchild;
s=p;
while(p->lchild)
{
s=p; p=p->lchild;
}
*f=p;
p->lchild=q->lchild;
if(s!=p)
{
s->lchild=p->rchild;
p->rchild=q->rchild;
}
}
}
free(q);
flag=1;
}
return flag;
}
void InOrder(NodeType *bt)
{
if(bt==NULL) return;
InOrder(bt->lchild);
printf("%3d",bt->data);
InOrder(bt->rchild);
}
/*折半查找*/
int Binary_Search(S_TBL *tbl,int kx)
{
int low,high,mid,flag;
flag=0;
low=1;
high=tbl->length;
while(low<=high)
{
mid=(low+high)/2;
if(kx<tbl->data[mid].num)
{
high=mid-1;
}
elseif(kx>tbl->data[mid].num)
{
low=mid+1;
}
else
{
flag=mid; break;
}
}
return flag;
}
/*主菜单*/
void menu()
{
printf("1、插入并建立二叉树\n");
printf("2、删除二叉树上的结点\n");
printf("3、中序遍历二叉树\n");
printf("4、折半查找\n");
printf("0、退出\n");
}
void main()
{
int n,m=1;
NodeType *T=NULL;
menu();
while(m)
{
printf("请输入选项:");
scanf("%d",&n);
switch(n)
{
case 1:
{/*插入并建立二叉树*/
int flag;
int kx;
printf("请输入一组数据以-1结尾:");
scanf("%d",&kx);
while(kx!=-1)
{
flag=InsertNode(&T,kx);
if(flag==0)
{
printf("插入失败!\n");
break;
}
scanf("%d",&kx);
}
break;
}
case 2:
{/*删除二叉树上的结点*/
int flag;
int kx;
printf("请输入要删除的数:");
scanf("%d",&kx);
flag=DeleteNode(&T,kx);
if(flag==0)
{
printf("删除失败!\n");
}
else
{
printf("删除成功!\n");
}
break;
}
case 3:
{
InOrder(T);
printf("\n");
break;
}
case 4:
{
int i,flag;
int kx;
S_TBL *tbl=(S_TBL *)malloc(sizeof(S_TBL));
printf("请输入长度:");
scanf("%d",&(tbl->length));
tbl->data=(datatype *)calloc( tbl->length, sizeof(datatype) );
printf("请输入元素:");
for(i=1;i<=tbl->length;i++)
{
scanf("%d",&((tbl->data[i]).num));
}
printf("请输入你要查找的数:");
scanf("%d",&kx);
flag=Binary_Search(tbl,kx);
if(flag==0)
{
printf("查找失败!\n");
}
else
{
printf("位置=%6d\n",flag);
}
break;
}
case 0:
{
m=0;
break;
}
}
}
}
三、实验总结
通过本次实验,我对常用数据结构的基本概念及其不同的实现方法的理论得到进一步的掌握,并对用折半查找实现某一已知的关键字的查找有了较为深刻的认识,同时对用二叉排序树的插入算法建立二叉排序树,以及在二叉排序树中删除某一指定关键字元素的具体操作也自己动手实践了。总的来说,加深了我对课本上所学到的东西的记忆及理解。
正在阅读:
数据结构实验 查找07-20
2017年英语六级分数分布情况02-15
F5 金融行业解决方案05-06
民主生活会批评与自我批评发言稿 一年来06-26
律协面试题目答案12-03
家长批评孩子的十大技巧08-20
黔东南州中小学教师系列职称评审工作细则09-08
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 数据结构
- 查找
- 实验
- 氧化还原滴定法1
- Double action Strike form歌词
- 第三章 物态变化第四节-升华凝华学案
- 小学四年级语文4字词语成语填空题
- 人类将毁于不会毁于科技辩论词
- 电容降压电路计算方法(完整版)
- 矿井通风自动控制系统研究与开发
- C语言程序设计教学大纲
- 贷款新规案例分析
- 基于单片机的地铁自动门设计(本科毕业论文)
- 2015陕西公务员考试时政热点:2015年7月份国内时政重点汇总(一)
- 生猪标准化规模养殖场建设项目实施方案
- 初中语文古诗词精选
- The trace formula for quantum graphs with general self adjoint boundary conditions
- 基于51单片机和DAC0832的信号源(proteus电路图加程序)
- 新东方BEC中高级词汇(2012最新版)
- 张文志汽车定速巡航系统
- 城市河道水位远程监测系统设计 外文翻译
- 让眼神充满魅力(二)
- Android应用开发_学习笔记