数据结构:实验七:数据查找

一、    实验目的

(1)领会各种查找算法的过程和算法设计。

(2)掌握查找算法解决实际问题。

二、  实验要求

(1)编写一个程序exp8-1.cpp, 按提示输入10个任意的整形数据(无序),再输入一个待查找的数据,采用顺序查找方法,如果查找成功,返回该数据所在的位置(逻辑序号)。 如果查找不成功,给出一定的提示。

(2)编写一个程序exp8-2.cpp,输出在顺序表(1,2,3,4,5,6,7,8,9,10)中采用折半查找方法查找关键字9的过程。

三、实验环境

Windows+DEV C++( 或者其他编译工具)

四、实验步骤及结果 

1.类型声明

(1)

顺序查找(无序):

typedef int KeyType;//定义关键字类型为inttypedef char InfoType[10];typedef struct {KeyType Key;//关键字项InfoType data;//其他数据项,类型为InfoType} NodeType; //查找元素类型typedef NodeType SeqList[MAXSIZE];

(2)

折半查找(递归):

typedef int KeyType;//定义关键字类型为inttypedef char InfoType[10];typedef struct {KeyType key;//关键字项InfoType data;//其他数据项,类型为InfoType} NodeType; //查找元素类型typedef NodeType SeqList[MAXL];//顺序表类型

2.各类查找算法的实现

(1)

顺序查找(无序):

int Search(SeqList R,int n,KeyType k) {int i=0;while(i<n&&R[i].Key!=k) {i++;}if(i>=n)return -1;elsereturn i;}

(2)

折半查找(递归):

int  BinSearch(SeqList R,KeyType k,int low,int high,int count)//折半查找算法(递归){int mid;if(low<=high){mid=(low+high)/2;printf("第%d次查找:在[%d,%d]中查找到元素R[%d]:%d\n",++count,low,high,mid,R[mid].key);if(R[mid].key==k)//查找成功返回return mid;else if(R[mid].key>k) //继续在R[low...mid-1]中查找BinSearch(R,k,low,mid-1,count);elseBinSearch(R,k,mid+1,high,count);//继续在R[mid+1...high]中查找}else return -1;}

3.主程序设计及完成实验要求中的功能

(1)

顺序查找(无序):

int main() {SeqList R;int n=10;KeyType k = 9;printf("输入序列内容(十个不同整型数字):");int i;for(i=0;i<10;i++){scanf("%d",&R[i].Key);}printf("序列为:");for(i=0;i<n;i++){printf("%d,",R[i].Key);}printf("\n请输入需要查找的数字为:");scanf("%d",&k);printf("需要搜索的数字为%d",k);if((i =Search(R,n,k))!=-1)printf("\n%d在序列的第%d位置",k,i);elseprintf("\n元素%d不在序列中\n",k);printf("\n");}

(2)

折半查找(递归):

int main(){SeqList R;int i;int n=10;KeyType k = 9;int a[]={1,2,3,4,5,6,7,8,9,10};for(i=0;i<n;i++)//建立顺序表R[i].key=a[i];printf("用递归方法:\n");if((i =BinSearch(R,k,0,9,0))!=-1)printf("元素%d的位置是%d\n",k,i);elseprintf("元素%d不在表中\n",k);}

exp8-1:

#include <stdio.h>
#define MAXSIZE 100
typedef int KeyType;//定义关键字类型为int
typedef char InfoType[10];
typedef struct {KeyType Key;//关键字项InfoType data;//其他数据项,类型为InfoType
} NodeType; //查找元素类型
typedef NodeType SeqList[MAXSIZE];
int Search(SeqList R,int n,KeyType k) {int i=0;while(i<n&&R[i].Key!=k) {i++;}if(i>=n)return -1;elsereturn i;
}
int main() {SeqList R;int n=10;KeyType k = 9;printf("输入序列内容(十个不同整型数字):");int i;for(i=0;i<10;i++){scanf("%d",&R[i].Key);}printf("序列为:");for(i=0;i<n;i++){printf("%d,",R[i].Key);}printf("\n请输入需要查找的数字为:");scanf("%d",&k);printf("需要搜索的数字为%d",k);if((i =Search(R,n,k))!=-1)printf("\n%d在序列的第%d位置",k,i);elseprintf("\n元素%d不在序列中\n",k);printf("\n");
}

exp8-2:

#include <stdio.h>
#define MAXL 100
typedef int KeyType;//定义关键字类型为int 
typedef char InfoType[10];
typedef struct {KeyType key;//关键字项InfoType data;//其他数据项,类型为InfoType
} NodeType; //查找元素类型
typedef NodeType SeqList[MAXL];//顺序表类型 
int  BinSearch(SeqList R,KeyType k,int low,int high,int count)//折半查找算法(递归)
{int mid; if(low<=high){mid=(low+high)/2;printf("第%d次查找:在[%d,%d]中查找到元素R[%d]:%d\n",++count,low,high,mid,R[mid].key);if(R[mid].key==k)//查找成功返回return mid;else if(R[mid].key>k) //继续在R[low...mid-1]中查找BinSearch(R,k,low,mid-1,count); elseBinSearch(R,k,mid+1,high,count);//继续在R[mid+1...high]中查找}else return -1;
}
int main()
{SeqList R;int i;int n=10;KeyType k = 9;int a[]={1,2,3,4,5,6,7,8,9,10};for(i=0;i<n;i++)//建立顺序表R[i].key=a[i];printf("用递归方法:\n"); if((i =BinSearch(R,k,0,9,0))!=-1)printf("元素%d的位置是%d\n",k,i);elseprintf("元素%d不在表中\n",k);
}

4.实验结果截图

(1)

顺序查找(无序):

(2)

折半查找(递归):

如需源文件,请私信作者,无偿

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/5871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

socat移植到arm+linux

socat是一个用于建立双向数据流传输的工具&#xff0c;它可以在不同的网络层上创建连接&#xff0c;并支持多种协议&#xff0c;如TCP、UDP、SSL等。它非常强大且易于使用&#xff0c;因此广泛用于网络开发和系统管理中&#xff0c;这里记录一下移植到嵌入式系统的过程。 下载s…

每天学习一个Linux命令之sed

每天学习一个Linux命令之sed 欢迎来到我的博客系列&#xff0c;今天我们将学习一个非常强大的Linux命令——sed&#xff0c;它可以在文本处理中实现各种强大的操作。sed&#xff08;Stream Editor&#xff09;是Linux环境下的一种流编辑器&#xff0c;可以对文件内容进行替换、…

Mysql_数据库事务

文章目录 &#x1f60a; 作者&#xff1a;Lion J &#x1f496; 主页&#xff1a; https://blog.csdn.net/weixin_69252724 &#x1f389; 主题&#xff1a; MySQL__事务&#xff09; ⏱️ 创作时间&#xff1a;2024年04月26日 ———————————————— 这里写目…

服务端不 listen 可以创建 tcp 连接吗

这个问题有三类答案。 上来就撸 linux kernel 源码&#xff0c;折腾半天&#xff0c;哦&#xff0c;终于在 tcp_rcv_state_process 里找到了 tcp_rcv_synsent_state_process 调用&#xff0c;后者包含&#xff1a; if (th->syn) {/* We see SYN without ACK. It is attemp…

【golang-ent】go-zero框架 整合 ent orm框架实现一对一 一对多 多种姿势查询方式

一、ent的 O2O 问题 官方文档如下: https://entgo.io/zh/docs/schema-edges#o2o-same-type 1、ent O2O问题 官方提供了三种 one2one的方式,可以看到他全部使用了 mysql的 foregionKey 的方式进行关联,虽然举例了单表和双表的不同使用方式,但是我们实际使用mysql中是不创建…

【R语言数据分析】函数

目录 自定义函数 apply函数 分类汇总函数aggregate 自定义函数 R语言中的自定义函数更像是在自定义一种运算规则。 自定义函数的语法是 函数名 函数体 } 比如 表示定义了一个名为BMI_function的函数&#xff0c;这个函数代表了一种运算规则&#xff0c;就是把传入的x和…

目标检测算法YOLOv3简介

YOLOv3由Joseph Redmon等人于2018年提出&#xff0c;论文名为&#xff1a;《YOLOv3: An Incremental Improvement》&#xff0c;论文见&#xff1a;https://arxiv.org/pdf/1804.02767.pdf &#xff0c;项目网页&#xff1a;https://pjreddie.com/darknet/yolo/ 。YOLOv3是对YOL…

实习周志定制

实习周记一 踏进跃升成人文化培训学校有限公司的大门&#xff0c;我的内心充满了激动和期待。第一周的实习&#xff0c;我主要参与了公司文化的学习&#xff0c;了解了公司的教育理念和教学模式。我逐渐认识到&#xff0c;前台工作不仅仅是简单的接待&#xff0c;更是学校形象…

Node.js -- express 框架

文章目录 1. express 使用2. 路由2.1 路由的使用2.2 获取请求报文参数2.3 获取路由参数2.4 路由参数练习 3. express 响应设置4. 中间件4.1 全局中间件4.2 路由中间件4.3 静态资源中间件 5. 获取请求体数据 body-parser6. 防盗链7. 路由模块化8. 模板引擎8.1 了解EJS8.2 列表渲…

[技术总结]: Pytorch加速和省内存

目录 mmengine 相关文档pytorch ddp dataset使用共享内存加速数据读取一些大规模数据集加载模型多卡训练, 模型并行 mmengine 相关文档 MMEngine理解 pytorch ddp dataset使用共享内存 关键在于将data_list序列化 mmengine实现 或者使用lmdb数据库也可以 加速数据读取 使…

【C++】深入理解string类

一、熟悉string类 1.1 string类的由来&#xff1a; C语音中的字符串需要我们自己管理底层空间&#xff0c;容易内存泄露。而C是面向对象语音&#xff0c;所以它把字符串封装成一个string类。 C中对于string的定义为&#xff1a;typedef basic_string string; 也就是说C中的str…

java面试(微服务)

SpringCloud五大组件 Nacos&#xff1a;注册中心Ribbon&#xff1a;负载均衡Feign&#xff1a;远程调用sentinel&#xff1a;服务熔断Gateway&#xff1a;网关 注册中心 Eureka Nacos 负载均衡 Ribbon负载均衡流程 Ribbon的负载均衡策略 RoundRobinRule&#xff1a;简单的…

C++中把Lambda 表达式作为参数传递给模板函数。

例子&#xff1a; template<class fun> void mytest(fun f) {_string s1 "abc";_string s2 "abc";if (f(s1, s2)){std::cout << "相等。\n";}}int main() {mytest([](const _string s1, const _string& s2) { return s1 s2; …

贪心-区间问题

区间选点和最大不相交区间数量 区间选点问题描述 问题描述 给定 N个闭区间 [ai,bj]&#xff0c;请你在数轴上选择尽量少的点&#xff0c;使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。 输入格式 第一行包含整数 N&…

python学习笔记----异常、模块与包(九)

一、异常 1.1 什么是异常 在Python中&#xff0c;异常是程序执行时发生的错误。当Python检测到一个错误时&#xff0c;它会引发一个异常&#xff0c;这可能是由于多种原因&#xff0c;如尝试除以零、访问不存在的文件&#xff0c;或者尝试从列表中获取不存在的索引等。异常处…

数组的拷贝

数组的拷贝 文章目录 数组的拷贝浅拷贝内存分析 深拷贝内存分析 浅拷贝 概念&#xff1a;数组的浅拷贝是指新数组保存的是原数组的内存地址&#xff0c;并没有拷贝真正的值&#xff0c;如果原数组的内容发生改变那么新数组的内容也会发生相应改变。 代码实现&#xff1a; pu…

C语言/数据结构——每日一题(合并两个有序链表)

一.前言 嗨嗨嗨&#xff0c;大家好久不见&#xff01;今天我在LeetCode看到了一道单链表题&#xff1a;https://leetcode.cn/problems/merge-two-sorted-lists想着和大家分享一下&#xff0c;废话不多说&#xff0c;让我们开始今天的题目分享吧。 二.正文 1.1题目描述 1.2题…

phpstudy 搭建 upload-labs 文件上传靶场

phpstudy 搭建靶场&#xff1a;下载安装好phpstudy后&#xff0c;下载靶场源码&#xff1a; upload-labs下载地址&#xff1a; https://github.com/c0ny1/upload-labs 下载完压缩文件&#xff0c;解压文件&#xff0c;解压后的文件夹命名为upload--labs 将解压后到文件夹放…

python 关键字(import)

4、import 在Python编程中&#xff0c;import 是一个至关重要的关键字&#xff0c;它用于导入其他Python模块或库中的代码&#xff0c;以便在当前程序中使用。无论是Python新手还是经验丰富的开发者&#xff0c;都需要对import有深入的理解。 基础知识&#xff1a;import 的基…

docker如何生成springboot镜像

1、在springboot的jar包所在的目录下创建Dockerfile文件&#xff0c;此案例的目录为/usr/java Dockerfile的文件内容如下&#xff1a; FROM openjdk:8 LABEL author"zengyanhui" LABEL email"1181159889qq.com" WORKDIR /usr/java/springbootdemo COPY s…