news 2026/10/19 6:56:20

查找和线性查找(哈喜老师)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
查找和线性查找(哈喜老师)

1.与查找相关的概念

1.1:查找表

1.2:关键字

1.3:平均查找长度ASL

2.线性表的查找

2.1:顺序查找

在顺序查找中:下标 为0 的位置,通常不存储有效数据,专门用来放哨兵。(有效数据从下标为1的位置开始存储)

代码(优化前:不带哨兵的顺序查找)

// 定义查找表的数据结构(顺序表)typedefstruct{ElemType*elem;// 动态数组起始地址:实际申请 TableLen+1 个空间// 有效数据存在 elem[1]、elem[2]....TableLen]。elem[0] 存哨兵位intTableLen;// 表的有效长度:表示有效数据的个数}SSTable;// ============ 版本一:无哨兵 ============// 找到则返回该元素的下标,找不到返回0intSearch_Seq(SSTable ST,ElemType key){// 从表尾 TableLen 往前找,没有哨兵,for循环必须同时判断两个条件inti;for(i=ST.TableLen;i>=1&&ST.elem[i]!=key;--i);// i>=1 说明正常找到;i==0 说明遍历完都没找到// 注:i 最多减到0就停,不会访问 elem[0](那是哨兵位,未存有效数据)returni;}

代码(优化后:带哨兵的顺序查找)

// 定义查找表的数据结构(顺序表)typedefstruct{ElemType*elem;// 动态数组起始地址:实际申请 TableLen+1 个空间// 有效数据存在 elem[1]、elem[2]....TableLen],另外,elem[0] 存储哨兵位intTableLen;// 表的有效长度:表示有效数据的个数}SSTable;// ============ 版本二:带哨兵 ============// 找到则返回该元素的下标,找不到返回0intSearch_Seq(SSTable ST,ElemType key){// 【哨兵设置】把 key 存进 elem[0]——正是为它预留的哨兵位// 目的:避免循环中反复判断下标是否越界,简化循环条件ST.elem[0]=key;// 【从后往前遍历查找】// 从表尾(下标 TableLen,最后一个有效数据)向前找// 因有哨兵,即使遍历到表头也必然匹配 key,循环必停,不会越界inti;// ★ i 在循环外声明,供 return 使用for(i=ST.TableLen;ST.elem[i]!=key;--i);// 【返回结果】// i 不为0:找到,返回下标;i==0:命中哨兵,表中不存在目标元素,查找失败returni;}

顺序查找的平均查找长度

元素有序的顺序表、元素无序的顺序表的对比

2.2:折半查找

代码:

// 定义数据元素类型typedefintElemType;// 定义查找表的数据结构(顺序表)typedefstruct{ElemType*elem;// 动态数组基址:指向存储数据的数组首地址intTableLen;// 表的长度:表示顺序表中有效元素的个数}SSTable;/********************************************************** 函数功能:折半查找(二分查找) 前提条件:顺序表必须有序(升序) 参数:ST 顺序表结构体 key 要查找的关键字 返回值:找到返回下标,找不到返回 -1 **********************************************************/intBinarySearch(SSTable ST,ElemType key){// 左边界:初始指向第一个元素intleft=0;// 右边界:初始指向最后一个元素intright=ST.TableLen-1;intmid;// 区间有效时继续查找while(left<=right){// 计算中间位置mid=(left+right)/2;// 找到目标,返回下标if(ST.elem[mid]==key){returnmid;}// key 更小,去左半区elseif(key<ST.elem[mid]){right=mid-1;}// key 更大,去右半区else{left=mid+1;}}//当left>right时,表示查找失败,返回-1return-1;}

构造折半查找判定树(较复杂):

构造折半查找判定树的形态(重点)

帮助理解折半查找判定树的图片

例题:

真题1:(易)

例题2:(易)

例题3:(中、有坑)

真题4:(难,在视频的最后)

2.3:分块查找

2.3.1:分块查找的概念

2.3.2:例题

例题1:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/19 6:54:04

artcraft创作方法论:从数字绘画到工艺实物的完整工具链

artcraft 这个词第一次出现在我面前时&#xff0c;我愣了一下。艺术是艺术&#xff0c;工艺是工艺&#xff0c;把两个词拧在一起&#xff0c;既像是一种态度&#xff0c;又像是一套工具。这几年我一直在做数字绘画和传统手作的交叉创作&#xff0c;看到这个名字的第一反应不是某…

作者头像 李华
网站建设 2026/10/19 6:53:40

数据库内核实践:实现LRU缓冲池与并发控制全复盘

某高校软件学院数据库系统实验四&#xff0c;终于在我把一个周末加两晚搭进去之后提交了。这轮实验和前面三次完全不是一个画风&#xff1a;前几轮还在调SQL、画ER图、写存储过程&#xff0c;到了第四次&#xff0c;需求文档里明明白白写着「实现一个支持LRU置换与并发访问的缓…

作者头像 李华
网站建设 2026/10/19 6:52:07

800行手写MVC框架:可调试、可修改、可落地的活体实例

简介&#xff1a;本资源是一套基于ASP.NET MVC 5框架的员工管理系统&#xff08;EmpsMvc5&#xff09;完整可运行源码&#xff0c;面向Web开发初学者与MVC进阶学习者&#xff0c;旨在帮助开发者深入理解MVC分层架构、认证授权机制及数据库集成实践。包内共395个文件&#xff0c…

作者头像 李华
网站建设 2026/10/19 6:50:16

基于自适应MPC的二自由度车辆路径跟踪控制设计

带自适应参数调节的自动驾驶控制系统&#xff0c;核心是二自由度横摆动力学模型加模型预测控制&#xff08;MPC&#xff09;&#xff0c;最终目标是把任意路径跟踪这件事做到在不同车速、不同路面、不同负载下都能保持稳定和精度。这个项目我前前后后做了三个多月&#xff0c;中…

作者头像 李华
网站建设 2026/10/19 6:47:21

artcraft创作指南:艺术与手工艺融合的入门到进阶

说实话&#xff0c;第一次看到“artcraft”这个词&#xff0c;我愣了一下。它不像“woodworking”或者“ceramics”那样一眼就能看懂具体指什么&#xff0c;但这个组合词本身就很有意思——把“art”&#xff08;艺术&#xff09;和“craft”&#xff08;手工艺&#xff09;硬生…

作者头像 李华