【数据结构与算法】线性表的查找
- 顺序查找(线性查找)
- 折半查找(二分或对分查找)
- 分块查找
顺序查找
typedef struct{ //顺序表结构类型定义ElemType *R; //表基址int length; //表长
}SSTable ;
SSTable ST; //定义顺序表ST
int Search_Seq(SSTable ST,KeyType key){//若成功返回其位置信息,否则返回0for(i=ST.length;i>=1;--i)if(ST.R[i].key==key) return i;return 0;
}
改进:增加“哨兵”,将待查关键字key存入表头
int Search_Seq(SSTable ST,KeyType key){ST.R[0].key=key;for(i=ST.length;ST.R[i].key!=key;--i);return i;
}
顺序查找的特点:
优点:算法简单,逻辑次序无要求,且不同存储结构均适用。
缺点:ASL太长,时间效率太低
折半查找:每次将待查记录所在区间缩小一半
适用于有序线性表
表长n,low,high,mid分别指向待查元素所在区间的上界、下界和中点。key为给定的要查找的值
int Search_Bin(SSTable ST,KeyType key){low=1;high=ST.length; //置区间初值while(low<=high){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; //顺序表中不存在待查元素} //非递归
折半查找
优点:效率比顺序查找高
缺点:只适用于有序表,且限于顺序存储结构(对线性链表无效)
分块查找(索引顺序查找)
顺序法查找效率:(n+1)/2
折半法查找效率:log2(n+1)
分块查找效率:log2(n/s+1)+s/2 【s为每块内部记录个数,n/s为块的数目】
优点:插入删除容易,无需进行大量移动
缺点:要增加一个索引表的存储空间并对初始索引表进行排序算法
适用:如果线性表既要快速查找又经常动态变化,则可采用分块查找
查找方法比较
顺序查找 | 折半查找 | 分块查找 | |
---|---|---|---|
ASL(平均查找长度) | 最大 | 最小 | 中间 |
表结构 | 有序表、无序表 | 有序表 | 分块有序 |
存储结构 | 顺序表、线性链表 | 顺序表 | 顺序表、线性链表 |
【数据结构与算法】线性表的查找相关推荐
- 数据结构与算法--线性表的查找
一.查找的基本概念 1) 查找表: 查找表是由同一类型的数据元素(或记录)构成的集合 2) 由于集合中的数据元素之间存在着松散的关系,因此查找表是一种应用灵便的结构 3) 查找: 根据 ...
- Java版数据结构与算法——线性表
*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如 ...
- 数据结构与算法 | 线性表 —— 链表
原文链接:wangwei.one/posts/java-- 链表 定义 逻辑结构上一个挨一个的数据,在实际存储时,并没有像顺序表那样也相互紧挨着.恰恰相反,数据随机分布在内存中的各个位置,这种存储结构 ...
- 数据结构于算法—线性表
目录 前言 线性表基本架构 顺序表 插入 删除 其他操作 链表 基本结构 插入 带头节点与不带头节点 插入尾 删除 其他 代码实现 顺序表 链表 测试与结果 总结 原创公众号:bigsai 文章收藏在 ...
- educoder数据结构与算法 线性表 第1关:实现一个顺序存储的线性表
任务描述 本关任务:实现 step1/Seqlist.cpp 中的SL_InsAt.SL_DelAt和SL_DelValue三个操作函数,以实现线性表中数据的插入.删除与查找等功能. 相关知识 线性表 ...
- 线性表算法题库_数据结构与算法(线性表)练习题
.word 资料 . 三.写一个算法合并两个已排序的线性表. (用两种方法:数组表示的线性表(顺序表)和 指针表示的线性表(链表) ) 要求: 1 .定义线性表节点的结构,并定义节点的型和位置的型. ...
- 头歌-数据结构与算法 - 线性表
第1关:实现一个顺序存储的线性表 #include <stdio.h> #include <stdlib.h> #include "Seqlist.h" S ...
- 头歌平台数据结构与算法 线性表 第2关:实现一个连接存储的线性表
目录 任务描述 相关知识 编程要求 测试说明 任务描述 本关任务要求针对链接存储方式实现的顺序表完成数据插入操作函数,以实现线性表数据插入功能. 相关知识 线性表的存储也可以采用链接存储方式来实现.链 ...
- educoder数据结构与算法 线性表 第2关:实现一个链接存储的线性表
任务描述 本关任务:完成一个链接存储的线性表的小程序. 相关知识 线性表的存储也可以采用链接存储方式来实现.链接存储方式包括单链表.双链表和循环链表等形式. 下面描述了一种基于单链表的线性表实现方案: ...
- 数据结构与算法——线性表的顺序储存结构
目录 前言 一.顺序储存的定义及储存方式 二.地址计算方法 三.顺序存储结构的插入和删除 3.1 获得元素操作 3.2 插入操作 3.3 删除操作 四.分析插入和删除操作的时间复杂度 五.线 ...
最新文章
- python3.8.0shell_Python 3.8.0 正式发布 更新内容
- websocket学习笔记
- 并行开发 —— 第三篇 plinq的使用
- 软件设计师 - 系统测试
- python垃圾回收机制gcgo_python垃圾处理机制
- VBScript基础
- 小程序 实现语音播放功能
- tree.js 制作酷炫照片墙
- 国外设计素材网址干货
- js+Canvas 利用js 实现浏览器保存图片到本地
- 手把手教你用键盘开机
- Mac突然连接不上WiFi的问题
- vue3组件之间通信(二)——子传父属性和方法
- MD数据公式格式总结
- Android View的事件分发机制和滑动冲突解决方案
- 删除pdf签名 acrobat
- 一道简简单单的字节跳动算法面试题
- 我的K均值算法的matlab实现
- 商界大佬们惊人一致的六大成功密码!
- 难道google也这么小气? 安装Chrome后基于ie内核的浏览器ie6、greenbrowser、myie2均无法打开Google 软件精选?