当前位置: 首页 > news >正文

数据结构——查找(线性表的查找与树表的查找)

目录

1.查找

1.查找的基本概念

1.在哪里找?

 2.什么查找?

3.查找成功与否? 

4.查找的目的是什么? 

5.查找表怎么分类? 

6.如何评价查找算法? 

7.查找的过程中我们要研究什么? 

2.线性表的查找 

1.顺序查找 

代码示例:

 1.顺序查找的改进

代码示例:

2.顺序查找的性能分析与特点 

2.折半查找 

代码示例:

1.折半查找的性能分析与特点 

3.分块查找(索引顺序查找) 

1.分块查找性能分析与优缺点 

3.树表的查找 

1.二叉排序树 

1.二叉排序树的存储结构

代码示例:

2.二叉排序树的递归查找 

代码示例: 

3.二叉排序树的查找分析 

平衡二叉树 

4.二叉排序数的操作-插入 

5.二叉排序树的操作-删除 

4.总的代码


1.查找

533296e771294cbaa2746ef6e04969b0.png

1.查找的基本概念

1.在哪里找?

a9def868af234913868a73aae44271f7.png

 2.什么查找?

f9f7e196a1744e16bfe7259cd3e8c05e.png

3.查找成功与否? 

bfe61aa8ddd943f7acf5cc5b20b917a7.png

4.查找的目的是什么? 

a51e5f6f514049b991cb5068bd975fde.png

5.查找表怎么分类? 

6c003c29f02446ea94a41cce70496b37.png

6.如何评价查找算法? 

51ec30689b1f45b6b1413fef0b5f2888.png

7.查找的过程中我们要研究什么? 

d7bc73aacf224fc7a140dd5171df0964.png

2.线性表的查找 

eef9498bb7954bdd8a6d5fab5cac7054.png

1.顺序查找 

47ba2e82f5e04db3bd81d1b8f4407669.png

c91ee042172a4e11b7a1c9f35e6d9a32.png

代码示例:

typedef struct {int key;
}elem;typedef struct {elem *r;int len;
}sstable;sstable st;int search_seq(sstable st,int key) {for(int i = st.len; i >= 1; --i) {if(st.r[i].key == key) return i;return 0;}
}
 

b9a9a808e3694b318a4415c8563b5685.png

 1.顺序查找的改进

e4ba4f4e86fd4875abb501bf6c6abfea.png

ba7ce0590e3e4a94b7f1cc1a6e7bb43c.png

fcdd734399b84c1cad36eeb8d064db79.png

a47727fce9b74be7b834080cb1c2db40.png

代码示例:
int Search_seq(sstable st,int key) {st.r[0].key = key;int i;for(i = st.len; st.r[i].key != key; --i);return i;
}
 

c79ce80272e54bff8dfcc054034861dc.png

2.顺序查找的性能分析与特点 

3dea09fcb3a349a8bb8957d18fd9bf2a.png

c578c6704db24293ab255d1b1b1fe36d.png

738d66ea5188408d8b47fe87040f93b9.png

d7acc23868234f1a9ba04c3bbd719f9d.png

 

2.折半查找 

4b547c5f5cf844c09c194ed0e01e1698.png

f77d8dfedaa941be8029ef0e9a4aa3d8.png

aaf870f135af41ddb0bdf6950c7bccf8.png

1419712a749c4e4a97b246f02518aa40.png

代码示例:
 
int search_bin(sstable st,int key) {int low = 1;int high = st.len;while(low <= high) {int mid = (low + high) / 2;if(st.r[mid].key == key) return mid;else if(key < st.r[mid].key)high = mid - 1;else low = mid + 1;}return 0;
}

83cf0dd929b94b1587d1ec744b58f50b.png

4ed481b24d864da691dcd5500e05c251.png

a63cdf5df0bb4facb2a11e98e88346ba.png

1.折半查找的性能分析与特点 

f6a1c389a54f40b7b76c8e1983094a05.png

16fa0295167a40d891a517b5e66c2fee.png

2e7e8a16ea9f47ad89828ae56c814124.png

3.分块查找(索引顺序查找) 

546a37c1fa694f78ac83c8344cfb3279.png

8f13666cb30f45ce81a8a832ee7bc846.png

1.分块查找性能分析与优缺点 

381952aa31e54e21b68f3bec81b5a8a4.png

039a56248a6f4b1cb82b685de02a965d.png

f191ed21adb24296b963ee5043be129d.png

3.树表的查找 

1d3471901908473d9c27c3c7d90acf64.png

1.二叉排序树 

a409770b951e44f3b0082d5abb81bfd2.png

df037eab22ab464980ead17d156476f6.png

e0b5b59f2ed145dd83f6e6c40ef3e71d.png

3ffc4da738ab4f1383f8dbb8941c8de2.png

1.二叉排序树的存储结构

5a0a7984c2a847ceb8a7b23356db16e8.png

代码示例:
 
typedef struct {int key;
}elemtype;typedef struct bstnode {elemtype data;struct bstnode *lchild, *rchild;
}bstnode,*bstree;bstree t;

2.二叉排序树的递归查找 

a22ea3fa087f464685fbe2d5e476f3a5.png

a5c7483e9c994a1ea1c519a84c1843b3.png

代码示例: 
bstree searchbst(bstree t,int key) {if((!t) || key == t -> data.key) return t;else if(key < t -> data.key)return searchbst(t -> lchild,key);else return searchbst(t -> rchild,key);
}

3.二叉排序树的查找分析 

0b4430660853460fa87667c2dd72c5f7.png

27aff5d23c4545bcab11c992207ba7a6.png

a21afdf37dfe4ffd872afbe23b4d77b2.png

平衡二叉树 

574e568b8bd94e9fa72b3728e6bbaa79.png

4.二叉排序数的操作-插入 

30a0cf9a947d40f4940ea5f89651e63f.png

 

a2db92b6d828477baf544fa4c7e1a1bb.png

216451cdf1c249cd9482e99e2761091b.png

d9347d625dc94bfdb53d8f9936dea63d.png

6cbef40ed9724e9b8bf7a72cbb3e3b7f.png

5.二叉排序树的操作-删除 

dfaa609e58f4470b9b3b5ee6366d65da.png

14f50aa057a949548f29cec25738b611.png

f850985719e44fdfb0092222dfba753e.png

f1b92c16c6e347379eb21b7dae3699b2.png

ce8f4521e19c45f19313a869c3f58587.png

2b992b9215b143238ea6b84cf3f1f804.png

a93635bc67a54ca2bab3cb3a3652eb59.png

4.总的代码

#include<bits/stdc++.h>
using namespace std;typedef struct {int key;
}elem;typedef struct {elem *r;int len;
}sstable;sstable st;int search_seq(sstable st,int key) {for(int i = st.len; i >= 1; --i) {if(st.r[i].key == key) return i;return 0;}
}int Search_seq(sstable st,int key) {st.r[0].key = key;int i;for(i = st.len; st.r[i].key != key; --i);return i;
}int search_bin(sstable st,int key) {int low = 1;int high = st.len;while(low <= high) {int mid = (low + high) / 2;if(st.r[mid].key == key) return mid;else if(key < st.r[mid].key)high = mid - 1;else low = mid + 1;}return 0;
}typedef struct {int key;
}elemtype;typedef struct bstnode {elemtype data;struct bstnode *lchild, *rchild;
}bstnode,*bstree;bstree t;bstree searchbst(bstree t,int key) {if((!t) || key == t -> data.key) return t;else if(key < t -> data.key)return searchbst(t -> lchild,key);else return searchbst(t -> rchild,key);
}int main() {return 0;
}

相关文章:

数据结构——查找(线性表的查找与树表的查找)

目录 1.查找 1.查找的基本概念 1.在哪里找&#xff1f; 2.什么查找&#xff1f; 3.查找成功与否&#xff1f; 4.查找的目的是什么&#xff1f; 5.查找表怎么分类&#xff1f; 6.如何评价查找算法&#xff1f; 7.查找的过程中我们要研究什么&#xff1f; 2.线性表…...

MySQL入门学习-深入索引.组合索引

在 MySQL 中&#xff0c;组合索引&#xff08;也称为复合索引&#xff09;是在多个列上创建的索引。以下是关于组合索引的详细信息&#xff1a; 一、组合索引的概念&#xff1a; - 组合索引是基于多个列创建的索引结构。它可以提高在这些列上进行查询的效率。 二、深入理解组…...

RABBITMQ的本地测试证书生成脚本

由于小程序要求必须访问wss的接口&#xff0c;因此需要将测试环境也切换到https&#xff0c;看了下官方的文档 RabbitMQ Web STOMP Plugin | RabbitMQ里面有这个信息 然后敲打GPT一阵子&#xff0c;把要求输入几个来回&#xff0c;得到这样一个脚本&#xff1a; generate_cer…...

记录些Redis题集(4)

Redis 通讯协议(RESP) Redis 通讯协议&#xff08;Redis Serialization Protocol&#xff0c;RESP&#xff09;是 Redis 服务端与客户端之间进行通信的协议。它是一种二进制安全的文本协议&#xff0c;设计简洁且易于实现。RESP 主要用于支持客户端和服务器之间的请求响应交互…...

JVM:垃圾回收器

文章目录 一、介绍二、年轻代-Serial垃圾回收器三、老年代-SerialOld垃圾回收器四、年轻代-ParNew垃圾回收器五、老年代-CMS&#xff08;Concurrent Mark Sweep&#xff09;垃圾回收器六、年轻代-Parllel Scavenge垃圾回收器七、Parallel Old垃圾回收器八、G1垃圾回收器 一、介…...

Golang | Leetcode Golang题解之第228题汇总区间

题目&#xff1a; 题解&#xff1a; func summaryRanges(nums []int) (ans []string) {for i, n : 0, len(nums); i < n; {left : ifor i; i < n && nums[i-1]1 nums[i]; i {}s : strconv.Itoa(nums[left])if left < i-1 {s "->" strconv.It…...

单目3D和bev综述

文章目录 SOTA2D 检测单目3d检测3d bev cam范式1 Transformer attention is all you need 20172 ViT vision transformer ICLR 2021google3 swin transformer 2021 ICCV bestpaper MS4 DETR 20205 DETR3D 20216 PETR 20227 bevformerLSSbevdetcaddn指标 mAP NDS标注&#xff1a…...

每日Attention学习11——Lightweight Dilated Bottleneck

模块出处 [TITS 23] [link] [code] Lightweight Real-Time Semantic Segmentation Network With Efficient Transformer and CNN 模块名称 Lightweight Dilated Bottleneck (LDB) 模块作用 改进的编码器块 模块结构 模块代码 import torch import torch.nn as nn import to…...

EM32DX-E4 IO 扩展模块

输入&#xff1a;0x6000-01 // 输入 0-15 6020H——00H IN0 计数【0~7】 ——01H IN0_SetCountMode S32 r/w 初始值默认为 0 设置 IN0 的计数方式&#xff1a;0 电平下 降沿&#xff0c;1 电平上升沿&#xff0c; 2 电平任意沿 ——02H IN0_Set…...

【数据结构与算法】选择排序篇----详解直接插入排序和哈希排序【图文讲解】

欢迎来到CILMY23的博客 &#x1f3c6;本篇主题为&#xff1a;【数据结构与算法】选择排序篇----详解直接插入排序和哈希排序 &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux…...

SpringBoot实战:多表联查

1. 保存和更新公寓信息 请求数据的结构 Schema(description "公寓信息") Data public class ApartmentSubmitVo extends ApartmentInfo {Schema(description"公寓配套id")private List<Long> facilityInfoIds;Schema(description"公寓标签i…...

解决mysql,Navicat for MySQL,IntelliJ IDEA之间中文乱码

使用软件版本 jdk-8u171-windows-x64 ideaIU-2021.1.3 mysql-essential-5.0.87-win32 navicat8_mysql_cs 这个问题我调试了好久&#xff0c;网上的方法基本上都试过了&#xff0c;终于是解决了。 三个地方结果都不一样。 方法一 首先大家可以尝试下面这种方法&#xff1a…...

虚拟环境操作

1、对虚拟环境的操作 查看虚拟环境列表 conda env list 创建虚拟环境 conda create -n 虚拟环境名称 python3.x 激活虚拟环境 conda activate 虚拟环境名称 退出虚拟环境 conda deactivate 删除虚拟环境 conda remove -n 虚拟环境名称 all 2、对虚拟环境下的包的操作…...

企业网三层架构

企业网三层架构&#xff1a;是一种层次化模型设计&#xff0c;旨在将复杂的网络设计分成三个层次&#xff0c;每个层次都着重于某些特定的功能&#xff0c;以提高效率和稳定性。 企业网三层架构层次&#xff1a; 接入层&#xff1a;使终端设备接入到网络中来&#xff0c;提供…...

node.js的安装及学习(node/nvm/npm的区别)

一、什么是node、nvm和npm 1.Node.js node.js 一种Javascript编程语言的运行环境&#xff0c;能够使得javascript能够脱离浏览器运行。以前js只能在浏览器&#xff08;也就是客户端&#xff09;上运行&#xff0c;node.js将浏览器中的javascript运行环境进行封装的&#xff0c;…...

性能优化篇:用WebSocket替代传统的http轮循

当我还是初级菜鸟时,我只会写定时器定时调用接口,发起http请求,定时轮训请求接口,返回最新数据,定时器开启的多了还会引起页面卡顿的性能问题,虽然及时销了但还是会影响流畅问题。然后技术leader一声令下说改成websoket的请求方式,为什么这么做呢?下面来谈谈WebSocket相…...

virtualbox的ubuntu默认ipv4地址为10.0.2.15的修改以及xshell和xftp的连接

virtualbox安装Ubuntu后&#xff0c;默认的地址为10.0.2.15 我们查看virtualbox的设置发现是NAT 学过计算机网络的应该了解NAT技术&#xff0c;为了安全以及缓解ip使用&#xff0c;我们留了部分私有ip地址。 私有IP地址网段如下&#xff1a; A类&#xff1a;1个A类网段&…...

Codeforces Round 957 (Div. 3)(A~D题)

A. Only Pluses 思路: 优先增加最小的数&#xff0c;它们的乘积会是最优,假如只有两个数a和b&#xff0c;b>a&#xff0c;那么a 1&#xff0c;就增加一份b。如果b 1&#xff0c;只能增加1份a。因为 b > a&#xff0c;所以增加小的数是最优的。 代码: #include<bi…...

fedora 40 安装拼音输入法

仅做参考&#xff0c;一般主流linux版本在安装完成后&#xff0c;都会自带中文输入法。而需要配置中文输入法的小众发行版往往软件仓库自带的依赖不全。 1,sudo dnf install ibus 2,sudo dnf install im-chooser 3,sudo dnf install ibus-libpinyin 4,在终端输入im-choose…...

Chromium CI/CD 之Jenkins实用指南2024-如何创建新节点(三)

1. 前言 在前一篇《Jenkins实用指南2024-系统基本配置&#xff08;二&#xff09;》中&#xff0c;我们详细介绍了如何对Jenkins进行基本配置&#xff0c;包括系统设置、安全配置、插件管理以及创建第一个Job。通过这些配置&#xff0c;您的Jenkins环境已经具备了基本的功能和…...

Git代码管理工具 — 3 Git基本操作指令详解

目录 1 获取本地仓库 2 基础操作指令 2.1 基础操作指令框架 2.2 git status查看修改的状态 2.3 git add添加工作区到暂存区 2.4 提交暂存区到本地仓库 2.5 git log查看提交日志 2.6 git reflog查看已经删除的记录 2.7 git reset版本回退 2.8 添加文件至忽略列表 1 获…...

Linux——多线程(五)

1.线程池 1.1初期框架 thread.hpp #include<iostream> #include <string> #include <unistd.h> #include <functional> #include <pthread.h>namespace ThreadModule {using func_t std::function<void()>;class Thread{public:void E…...

张量分解(4)——SVD奇异值分解

&#x1f345; 写在前面 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;这里是hyk写算法了吗&#xff0c;一枚致力于学习算法和人工智能领域的小菜鸟。 &#x1f50e;个人主页&#xff1a;主页链接&#xff08;欢迎各位大佬光临指导&#xff09; ⭐️近…...

第三方配件也能适配苹果了,iOS 18与iPadOS 18将支持快速配对

苹果公司以其对用户体验的不懈追求和对创新技术的不断探索而闻名。随着iOS 18和iPadOS 18的发布&#xff0c;苹果再次证明了其在移动操作系统领域的领先地位。 最新系统版本中的一项引人注目的功能&#xff0c;便是对蓝牙和Wi-Fi配件的配对方式进行了重大改进&#xff0c;不仅…...

Docker 部署 Nginx 并在容器内配置申请免费 SSL 证书

文章目录 dockerdocker-compose.yml申请免费 SSL 证书请求头参数带下划线 docker https://hub.docker.com/_/nginx docker pull nginx:1.27注&#xff1a; 国内网络原因无法下载镜像&#xff0c;nginx 镜像文件下载链接 https://pan.baidu.com/s/1O35cPbx6AHWUJL1v5-REzA?pw…...

模型评估与选择

2.1 经验误差与过拟合 错误率&#xff08;error rate&#xff09;&#xff1a; 分类错误的样本数占样本总数的比例 精度&#xff08;accuracy&#xff09;&#xff1a;1- 错误率 训练误差 / 经验误差&#xff1a;在训练集上的误差 泛化误差&#xff1a;在新样本上的误差 过…...

有必要把共享服务器升级到VPS吗?

根据自己的需求来选择是否升级&#xff0c;虚拟专用服务器 (VPS) 是一种托管解决方案&#xff0c;它以低得多的成本提供专用服务器的大部分功能。使用 VPS&#xff0c;您的虚拟服务器将与在其上运行的其他虚拟服务器共享硬件服务器的资源。但是&#xff0c;与传统的共享托管&am…...

LLM代理应用实战:构建Plotly数据可视化代理

如果你尝试过像ChatGPT这样的LLM&#xff0c;就会知道它们几乎可以为任何语言或包生成代码。但是仅仅依靠LLM是有局限的。对于数据可视化的问题我们需要提供一下的内容 描述数据:模型本身并不知道数据集的细节&#xff0c;比如列名和行细节。手动提供这些信息可能很麻烦&#…...

大模型系列3--pytorch dataloader的原理

pytorch dataloader运行原理 1. 背景2. 环境搭建2.1. 安装WSL & vscode2.2. 安装conda & pytorch_gpu环境 & pytorch 2.112.3 命令行验证python环境2.4. vscode启用pytorch_cpu虚拟环境 3. 调试工具3.1. vscode 断点调试3.2. py-spy代码栈探测3.3. gdb attach3.4. …...

SQLServer 如何设置端口

在SQL Server中&#xff0c;可以通过以下步骤设置端口&#xff1a; 打开SQL Server配置管理器。可以在开始菜单中搜索“SQL Server配置管理器”来找到它。 在左侧导航窗格中&#xff0c;展开“SQL Server网络配置”节点。 选择你要配置的实例&#xff0c;如“SQL Server Netw…...