数据查找(search)-----线性表查找

news2024/11/21 0:37:04

目录

前言

线性表查找

1.无序表查找

2.无序表查找

3.分块查找


前言

        前面我们已经学习过了相关数据结构的知识,那么今天我们就开始去学习数据的查找,在不同的数据结构里面去查找目标数据,这就是数据的查找算法。今天就从线性结构的表去查找数据元素开始学习。

线性表查找

在此之前我们学习过的线性表有顺序表,链表,栈和队列,这些都是线性结构的数据结构,这里我们要想在这些数据结构里面查找到我们想要的数据元素,就叫做线性表查找。具体的线性表查找又分以下部分查找方式

  • 无序线性表查找
  • 有序线性表查找
  • 局部分块查找

下面我就来一一介绍这三种查找方式。

1.无序表查找

        无序表查找又称作为顺序查找,也就是从线性表的起始位置开始,逐个比较元素,直到找到目标元素或遍历完整个线性表。 顺序查找适用于无序线性表和小规模的有序线性表,时间复杂度为O (n)。

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef struct data {
	int key;//关键字
	//…………
}Datatype;

typedef struct table {
	Datatype* data;
	int length;
}Stable;

//创建初始化表
Stable* Create_inittable(int m) {
	Stable* table = (Stable*)malloc(sizeof(Stable));
	assert(table);
	table->data = (Datatype*)malloc(sizeof(Datatype) * m);
	assert(table->data);
	//初始化key为-1
	for (int i = 0; i < m; i++) {
		table->data[i].key = -1;
	}
	table->length = 0;
	return table;
}

//p插入数据
void insert_data(Stable table, Datatype data, int p) {
	if (table.data[p].key!=-1) {
		return;
	}
	table.data[p].key = data.key;
}

//查找
int search_key(Stable table, int key) {
	for (int i = 0; i < table.length; i++) {
		if (table.data[i].key == key)
			return i;//找到了就返回这个位置
	}
	return -1;//没找到
}


 这种查找方式说白了就是从头开始去查找,一个一个找,如果数据量很大的情况下,是非常耗时间的。

2.无序表查找

        无序表查找又称作为二分查找,仅适用于有序线性表。 首先将线性表按照某种规则进行排序,然后通过比较目标元素与中间元素的大小关系,将查找范围缩小一半,重复这个过程直到找到目标元素或确定目标元素不存在。 二分查找的时间复杂度为O (logn)。

#include<stdio.h>

//折半查找(有序的) log2n+ 1 顺序储存结构
int binary_search(int* key, int target,int n) {
	int left = 0;
	int right = n - 1;
	while (left <= right) {
		int mid = (left + right) / 2;
		if (target < key[mid])
			right = mid - 1;
		else if (target > key[mid])
			left = mid + 1;
		else
			return mid;//返回下标
	}
	return -1;//没找到
}

int main() {
	int key[] = { 1,2,3,4,5,6,7,8,9,10 };
	printf("%d\n", binary_search(key, 10, 10));
}

二分查找算法,当且仅当数据有序排列的时候可以去使用,虽然查找效率大大提高,但是数据必须是排好序的才可以,也是有一定的局限性的。

3.分块查找

        分块查找又称为 索引顺序查找 ,其数据结构可以简单地描述为:分块查找把线性表分成若干块,每一块中的元素存储顺序是任意的,但是块与块之间必须按照关键字大小有序排列,即前一块中的最大关键字要小于后一块的最小关键字。

        分块查找类似于查字典,如果你要去查某一个单词的时候,首先去看这个单词的首字母,然后找到相对应的区域,再接着往下查找。

条件(查找过程)

1、将表分成几块,且表或者有序,或者分块有序;

        若i<j,则第j块中所有记录的关键字均大于第i块中的最大关键字。

2、建立“索引表”(每个结点含有最大关键字域和指向本

        块第一个结点的指针,且按关键字有序)。

 以上就是本期的全部内容了,我们下次见!

分享一张壁纸:

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

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

相关文章

QMS质量检验管理|攻克制造企业质量检验难题,助力企业提质增效

在日益激烈的市场竞争中&#xff0c;对产品质量严格把关&#xff0c;是制造企业提高核心竞争力与品牌价值的关键因素。那如何高效、高质地完成产品质检工作&#xff1f;这就需要企业在工业质检中引进数字化技术加以辅助&#xff0c;进而推动智能制造高质量发展。 蓝库云QMS质量…

VR全景对比在行业中如何呈现优势?功能有多强大?

我们在买车、买房或者是挑选旅游景区的时候&#xff0c;总是拿不定注意&#xff0c;彼此之间差异化细节处展现的并不明显&#xff0c;往往一个细节需要翻来覆去好几遍才能看懂。现在VR全景对比打破传统图片对比方式&#xff0c;让差异化效果更快展现&#xff01; VR全景对比是通…

Simulink查表法实现NTC温度计算模型

目录 前言 把NTC数据导入到excel 把excel数据导入Matlab 拟合NTC温度曲线 查表实现温度计算 总结 前言 在实际项目中需要对NTC对某些区域进行温度采样和做一些系统层面的保护等等&#xff0c;比如过温降载&#xff0c;过温保护&#xff0c;这时就需要对NTC或者其他的温度传…

Docker之docker-compose(介绍,安装及入门示例)

文章目录 一、docker-compose介绍Compose 中有两个重要的概念&#xff1a; 二、docker-compose安装三、docker-compose简单示例参考网址&#xff1a; 一、docker-compose介绍 Compose 项目是 Docker 官方的开源项目&#xff0c;负责实现对 Docker 容器集群的快速编排。 Compo…

第7讲:VBA中利用FIND的代码实现多值查找实例

《VBA代码解决方案》(10028096)这套教程是我最早推出的教程&#xff0c;目前已经是第三版修订了。这套教程定位于入门后的提高&#xff0c;在学习这套教程过程中&#xff0c;侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码摆好…

diffusers-AutoPipline

https://huggingface.co/docs/diffusers/tutorials/autopipelinehttps://huggingface.co/docs/diffusers/tutorials/autopipelineAutoPipeline会自动检测要使用的正确流程类&#xff0c;这样可以更轻松地加载与任务相对应的检查点&#xff0c;而无需知道具体的流程类名称。 1.…

.net core iis 发布后登入的时候请求不到方法报错502

.net core iis 发布后登入的时候请求不到方法报错502 502 bad gateway 502 - Web 服务器在作为网关或代理服务器时收到了无效响应。 您要查找的页面有问题&#xff0c;无法显示。当 Web 服务器(作为网关或代理)与上游内容服务器联系时&#xff0c;收到来自内容服务器的无效…

配置管理工具-Confd

1 简介 1.1 Confd介绍 Confd是一个轻量级的配置管理工具。通过查询后端存储&#xff0c;结合配置模板引擎&#xff0c;保持本地配置最新&#xff0c;同时具备定期探测机制&#xff0c;配置变更自动reload。对应的后端存储可以是etcd&#xff0c;redis、zookeeper等。[1] 通过…

2024年湖北黄冈建安ABC建筑企业专职安全员报名事项

2024年湖北黄冈建安ABC建筑企业专职安全员报名事项 专职安全员一般是指从事安全管理方面的工作&#xff0c;普遍的是建筑施工行业&#xff0c;建筑工地安全员&#xff0c;专职安全员C证&#xff0c;黄冈建筑安全员ABC-建筑单位在黄冈&#xff0c;只能在黄冈报考建筑安全员ABC。…

div 中文本太长用省略号隐藏展示,鼠标放上来弹出提示

需求描述 div 中有一行文本。 文本特别特别的长&#xff0c; 反正是超出了div所容纳的长度。 你呢&#xff0c; 现在想要的效果是&#xff1a; 1.文本就展示一行&#xff0c;多余的部分用省略号代替展示&#xff1b; 2.鼠标放上去的时候&#xff0c;用tip的方式展示完整的信息…

【AIFEM案例分析】药柱随机响应分析

AIFEM是由天洑自主研发的一款通用的智能结构仿真软件&#xff0c;助力用户解决固体结构相关的静力学、动力学、振动、热力学等实际工程问题&#xff0c;软件提供高效的前后处理工具和高精度的有限元求解器&#xff0c;帮助用户快速、深入地评估结构的力学性能&#xff0c;加速产…

三分钟学习一个python小知识9-----------我的对python中random的理解

文章目录 random库一、生成随机浮点数二、生成指定范围内的随机整数三、生成指定范围内的随机浮点数四、从序列中随机选择元素总结 random库 在Python中&#xff0c;random库是用于生成随机数的。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、生…

xx is not in the sudoers file. This incident will be reported

虚拟机再执行 sudo 命令的时候&#xff0c;出现类似这样的报错&#xff1a; xx is not in the sudoers file. This incident will be reported 其实&#xff0c;背景是这样的&#xff0c;我自己没事瞎作死&#xff0c;干了个这事&#xff0c;给 /etc/sudoers 文件的最下面一行…

软件开发全文档归档,开发、管理、实施、运维、服务巡检、信息安全、安全运维

在当今高度信息化的时代&#xff0c;软件开发已成为推动社会进步和发展的重要力量。软件开发过程中&#xff0c;文件支撑作为关键的一环&#xff0c;对于保障项目的顺利进行和产品的质量具有不可替代的作用。本文将探讨软件开发所需的主要文件及其作用。 一、引言 软件开发是…

C++核心编程---友元

目录 友元 友元的关键字 friend 友元的三种实现方式 1. 全局函数做友元 2. 类做友元 3. 成员函数做友元 友元 生活中你的家有客厅(Public)&#xff0c;有你的卧室(Private) 客厅所有来的客人都可以进去&#xff0c;但是你的卧室是私有的&#xff0c;也就是说只有你能进…

通过率90%的软件测试简历长什么样?

作为软件测试的从业者&#xff0c;面试或者被面试都是常有的事。 可是不管怎样&#xff0c;和简历有着理不清的关系&#xff0c;面试官要通过简历了解面试者的基本信息、过往经历等。 面试者希望通过简历把自己最好的一面体现给面试官&#xff0c;所以在这场博弈中&#xff0…

抖音小店怎么做?五步教你做好抖店,新手快来看!

我是电商珠珠 新手在做抖音小店的时候&#xff0c;往往在入驻完成之后&#xff0c;就不知道后续应该怎么操作了。 我将抖店的运营分为了五个步骤&#xff0c;可以供大家参考。 一、类目 开店之前选择好的类目&#xff0c;后续如果想要更改的话可以随时更改。 不过需要下架…

vue中watch实现翻译案例

翻译案例需要向在线接口发起一个Ajax请求&#xff0c;所以需要引入axios库。当输入一个单词或者文字时自动发起翻译请求。所以可以使用watch监听器来监听属性是否变更&#xff0c;当发生变化即发起翻译请求。 // 该方法会在数据变化时调用执行 // newValue新值, oldValue老值&…

linux环境mysql安装配置踩坑

背景&#xff1a; 最近公司项目希望改造工作流ACTIVITI5.x的源码框架支持大数据量&#xff08;历史表单表数据达到10亿&#xff09;&#xff0c; 方案暂定为 1.使用动态数据源 2.将工作流归档历史数据数据保存到一个库中这里定义为读库&#xff0c; 3.在办办件的数据单独一个库…

人工智能基础_机器学习012_手写梯度下降代码演示_手动写代码完成梯度下降_并实现梯度下降可视化---人工智能工作笔记0052

可以看到上面我们那个公式,现在我们用梯度下降实现一下,比如我们有一堆数据,但是没有方程的情况下,我们来看一下如果计算,对应的w值也就是seta值对吧,没有方程我们可以使用梯度下降 这里首先我们可以设置一个0.0001.我们知道梯度下降的公式, 梯度下降刚开始的时候,下降会快,然…