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

一、    实验目的

(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,一经查实,立即删除!

相关文章

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…

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 列表渲…

【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; …

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 将解压后到文件夹放…

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…

负债56亿,购买理财产品遭违约,操纵虚假粉丝,流量在下滑,客户数量减少,汽车之家面临大量风险(六)

本文由猛兽财经历时5个多月完成。猛兽财经将通过以下二十二个章节、8万字以上的内容来全面、深度的分析汽车之家这家公司。 由于篇幅限制&#xff0c;全文分为&#xff08;一&#xff09;到&#xff08;十&#xff09;篇发布。 本文为全文的第十四章、第十五章、第十六章。 目…

机器人系统ros2-开发实践04-ROS 2 启动文件管理大型项目的最佳实践

机器人上的大型应用通常涉及多个互连的节点&#xff0c;每个节点可以有许多参数。海龟模拟器中模拟多只海龟就是一个很好的例子。海龟模拟由多个海龟节点、世界配置以及 TF 广播器和监听器节点组成。在所有节点之间&#xff0c;存在大量影响这些节点的行为和外观的 ROS 参数。 …

《与 Apollo 共创生态——Apollo7周年大会干货分享》

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 阿波罗X企业自动驾驶解决方案自动驾驶技术提升与挑战自动驾驶系统功能与性能的详细解析<td alig…

python可视化学习笔记折线图问题-起始点问题

问题描述&#xff1a; 起始点的位置不对 from pyecharts.charts import Line import pyecharts.options as opts # 示例数据 x_data [1,2,3,4,5] y_data [1, 2, 3, 4, 5] # 创建 Line 图表 line Line() line.add_xaxis(x_data) line.add_yaxis("test", y_data) li…

数字阅览室的优势

近年来&#xff0c;随着我国社会经济的快速发展&#xff0c;信息技术的发展也得到了广泛的应用&#xff0c;我国高校图书馆和图书管理系统进入了快速发展的快车道。在这种环境下&#xff0c;数字化阅览室在校园中非常流行。数字阅览室是一套真正意义上的面向中小学图书管理、浏…

Golang | Leetcode Golang题解之第58题最后一个单词的长度

题目&#xff1a; 题解&#xff1a; func lengthOfLastWord(s string) (ans int) {index : len(s) - 1for s[index] {index--}for index > 0 && s[index] ! {ansindex--}return }