学习记录day19——数据结构 查找算法

概念

        在给定数据元素的某个值,在查找表中确定一个其关键字等于给定值的数据元素的操作,叫做查找

查找的分类

        顺序查找:将待查找数据,进行全部遍历一遍,直到找到要查找的元素

        折半查找:每次都去除一半的查找范围的查找方式,叫做折半查找

        哈希查找:利用哈希表和哈希函数完成的查找方式(效率最高)

折半查找

        使用前提:

                1、在顺序表中进行查找

                2、数据必须是有序的

        原理:

                1、在顺序存储的有序列表中,通过逐次减半查找范围,最终确定要查找的值的算法

         算法:

int half_search(int *arr,int n,int key)
{int low = 0;int high = n-1;int mid = -1;while(low<=high){mid = (low+high)/2;if (arr[mid] == key){return mid;}else if (arr[mid]>key){high = mid-1;}else{low = mid +1;}}return -1;
}

哈希查找

1、相关概念

        1)哈希表是借助哈希函数将序列存储于连续存储空间的查找表

       

         2)哈希函数是根据关键字确定存储位置的函数

        3)哈希冲突是不同关键字由哈希函数得到相同存储位置的现象

 2、构造哈希函数的方法:


                直接定址法、数字分析法、平方取中法、折叠法、除留余数法、随机数法

        5)除留余数法:取关键字被某个不大于哈希表表长m的数p除后所得余数为哈希地址的                                     方法

              序列长度n:待查找数据的个数

              哈希表表长m:一般为大于n的值,n/(3/4)

              要被除的值p:小于或等于表长的最大素数

3、常用的处理冲突的方法

4、代码实现

00.h

#ifndef DAY19_HASH_H
#define DAY19_HASH_H#include <myhead.h>
#define N 13 //哈希表长度 //定义数据类型
typedef int datatype;
typedef struct Node
{datatype data;struct Node *next;
}Node,*NodePtr;void init_hash(NodePtr *hash);void insert_hash(NodePtr *hash,datatype e);void show_hash(NodePtr *hash);int search_hash(NodePtr *hash,datatype key);
#endif // !DAY19_HASH_H

00.c

#include "00.h"void init_hash(NodePtr *hash)
{for (int i = 0; i < N; i++){hash[i] = NULL;}printf("初始化成功\n");
}void insert_hash(NodePtr *hash,datatype e)
{int pos = e%N;NodePtr p = (NodePtr)malloc(sizeof(Node));if (NULL ==p){return ;}p->data = e;p->next = NULL;p->next = hash[pos];hash[pos] = p;printf("插入成功\n");
}void show_hash(NodePtr *hash)
{for (int i = 0; i < N; i++){printf("%d:",i);NodePtr q = hash[i];while(q != NULL){printf("%d-->",q->data);q = q->next;}printf("NULL\n");}}int search_hash(NodePtr *hash,datatype key)
{int pos = key%N;NodePtr q = hash[pos];while (q && q->data != key){q = q->next;}if (NULL == q){return -1;}else{return 0;}}

main.c

#include "00.h"
int main(int argc, char const *argv[])
{int arr[10] = {25,51,8,22,26,67,11,16,54,41};//定义一个哈希表NodePtr hash[N];  //指针数组//初始化哈希表init_hash(hash);for (int i = 0; i < 10; i++){insert_hash(hash,arr[i]);}show_hash(hash);int res = search_hash(hash,22);if (res == -1){printf("不存在r\n");}else{printf("存在\n");}int res1 = search_hash(hash,500);if (res1 == -1){printf("不存在\n");}else{printf("存在\n");}return 0;
}

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

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

相关文章

Easy es问题总结

官网教程&#xff1a;https://www.easy-es.cn/pages/ac41f0/#settings 一 测试项目 1 pom <dependencies><!-- 排除springboot中内置的es依赖,以防和easy-es中的依赖冲突--><dependency><groupId>org.springframework.boot</groupId><artifa…

JavaScript 将网址 www. 抹去

简单好用 https://andi.cn/page/621609.html

【OpenCV C++20 学习笔记】序列化——XML和YAML文件处理

序列化——XML和YAML文件处理 序列化和反序列化代码实现XML/YAML文件的打开和关闭写入或读取文本和数字写入或读取OpenCV数据写入或读取数组以及map读取和写入自定义数据类型 输出结果 序列化和反序列化 如果希望永久保存某些对象&#xff0c;而不是每次运行程序的时候重新创建…

3DGS如何重塑点云配准?港中大开源首例3DGS配准工作!

论文标题&#xff1a; GaussReg: Fast 3D Registration with Gaussian Splatting 论文作者&#xff1a; Jiahao Chang, Yinglin Xu, Yihao Li, Yuantao Chen, and Xiaoguang Han 开源地址&#xff1a;https://jiahao620.github.io/gaussreg 导读&#xff1a; 点云配准是实现…

JavaScript(15)——操作表单元素属性和自定义属性

操作表单元素属性 表单很多情况&#xff0c;也需要修改属性&#xff0c;比如点击眼睛可以看到密码&#xff0c;本质是把表单类型转换为文本框正常的有属性有取值的&#xff0c;跟其他的标签属性没有任何区别 获取&#xff1a;DOM对象.属性名 设置&#xff1a;DOM对象.属性名…

国产超低功耗、±0.5℃精度的数字温度传感芯片 - M601B

温度传感芯片感温原理基于CMOS半导体PN节温度与带隙电压的特性关系&#xff0c;经过小信号放大、模数转换、数字校准补偿后&#xff0c;数字总线输出&#xff0c;具有精度高、一致性好、测温快、功耗低、可编程配置灵活、寿命长等优点。 数字温度传感芯片 - M601B&#xff0c;该…

如何解决 Nginx 与自动驾驶系统的集成问题?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; 文章目录 如何解决 Nginx 与自动驾驶系统的集成问题&#xff1f; 如何解决 Nginx 与自动驾驶系统的集成问题&#xff1f; 在当今科技飞速发展的时代&#xff0c;自动驾驶…

【基础算法总结】队列 + 宽搜(BFS)

队列 宽搜BFS 1.N 叉树的层序遍历2.二叉树的锯齿形层序遍历3.二叉树最大宽度4.在每个树行中找最大值 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#…

配置web服务器练习

4练习要求&#xff1a; 练习一&#xff1a;配置web服务器&#xff0c;当访问网站 www.haha.com 时显示&#xff1a;haha 练习二&#xff1a;配置web服务器&#xff0c;当访问网站 www.xixi.com/secret/ 时显示&#xff1a;this is secret 具体步骤&#xff1a; 1、配置yum…

go程序在windows服务中优雅开启和关闭

本篇主要是讲述一个go程序&#xff0c;如何在windows服务中优雅开启和关闭&#xff0c;废话不多说&#xff0c;开搞&#xff01;&#xff01;&#xff01;   使用方式&#xff1a;go程序 net服务启动 Ⅰ 开篇不利 Windows go进程编译后&#xff0c;为一个.exe文件,直接执行即…

docker挂载部署reids6.2.1

1.拉取镜像 docker pull redis:6.2.12.创建挂在目录&#xff08;根据自己要求修改具体目录&#xff09; mkdir -p /home/admin/redis/{data,conf}3.在/home/admin/redis/conf目录下创建redis.conf文件 cd /home/admin/redis/conf touch redis.conf4.复制下面文本到redis.conf…

实时同步:使用 Canal 和 Kafka 解决 MySQL 与缓存的数据一致性问题

目录 1. 准备工作 2. 将需要缓存的数据存储 Redis 3. 监听 canal 存储在 Kafka Topic 中数据 1. 准备工作 1. 开启并配置MySQL的 BinLog&#xff08;MySQL 8.0 默认开启&#xff09; 修改配置&#xff1a;C:\ProgramData\MySQL\MySQL Server 8.0\my.ini log-bin"HELO…

数据库练习——编写触发器及存储过程

1. 触发器 建立两个表:goods(商品表)、orders(订单表) 在商品表中导入商品记录 mysql> create database mydb16_trigger; Query OK, 1 row affected (0.00 sec)mysql> use mydb16_trigger; Database changed mysql> create table goods(-> gid char(8) primary …

系统架构师(每日一练7)

每日一练 1.关于网络延迟正确的是()。答案与解析 A.在对等网络中&#xff0c;网络的延迟大小与网络中的终端数量无关 B.使用路由器进行数据转发所带来的延迟小于交换机, C.使用internet服务器可最大程度地减小网络延迟 D.服务器延迟的主要影响因素是队列延迟和磁盘10延迟 2.以…

idea中项目目录,文件显示不全问题

问题&#xff1a;idea中项目目录显示不全问题 解决办法1&#xff1a; 删除目录中的.idea文件 用idea重新打开文件就行了 办法2&#xff1a;手动导入为maven项目 1. 2. 3. 4.选择要导入的项目&#xff0c;导入为maven

【网络流】——初识(最大流)

网络流-最大流 基础信息引入一些概念基本性质 最大流定义 Ford–Fulkerson 增广Edmons−Karp算法Dinic 算法参考文献 基础信息 引入 假定现在有一个无限放水的自来水厂和一个无限收水的小区&#xff0c;他们之间有多条水管和一些节点构成。 每一条水管有三个属性&#xff1a…

重拾CSS,前端样式精读-函数(颜色,计算,图像和图形)

前言 本文收录于CSS系列文章中&#xff0c;欢迎阅读指正 在计算机编程中&#xff0c;函数有着重要的作用和意义&#xff0c;它可以实现封装&#xff0c;复用&#xff0c;模块化&#xff0c;参数等功能效果&#xff0c;在如何在CSS中写变量&#xff1f;一文带你了解前端样式利…

AI学习记录 - 图像识别的基础入门

代码实现&#xff0c;图像识别入门其实非常简单&#xff0c;这里使用的是js&#xff0c;其实就是把二维数组进行公式化处理&#xff0c;处理方式如上图&#xff0c;不同的公式代表的不同的意义&#xff0c;这些意义网上其实非常多&#xff0c;这里就不细讲了。 const getSpecif…

【YOLOv8系列】图像分类篇----通过YOLOv8实现图像分类功能

最近需要使用YOLOv8对自己的数据集进行训练,从而实现图像分类的功能,因此记录一下整个过程。 YOLOv8的github地址:https://github.com/ultralytics/ultralytics 参考链接:超详细YOLOv8图像分类全程概述:环境、训练、验证与预测详解 文章目录 一、YOLOv8环境搭建二、准备…