【考研】数据结构考点——顺序查找
前言
本文内容源于对《数据结构(C语言版)》(第2版)、王道讲解、博主一只小山猪的专栏内容的学习所得心得、笔记整理和总结。
可结合以下链接搭配学习:
一文学懂经典算法系列之:顺序查找(附讲解视频)_一头小山猪的博客-CSDN博客_算法学习顺序
(上面的链接的所用算法是 java,本文是用 C++ 以顺序表作为存储结构实现的顺序查找算法)
【考研复习:数据结构】查找(不含代码篇)_住在阳光的心里的博客-CSDN博客
本文已参加活动,其地址:CSDN21天学习挑战赛
一、基本概念
1、顺序查找:适用于线性表的顺序存储结构和链式存储结构。通常分为对一般的无序线性表的顺序查找和对按关键字有序的线性表的顺序查找。(注意:对线性的链表只能进行顺序查找)
2、顺序查找的过程:从表的一端开始,依次将记录的关键字和给定值进行比较,若某个记录的关键字和给定值相等,则查找成功;反之,若扫描整个表后,仍未找到关键字和给定值相等的记录,则查找失败。
3、优点:算法简单,对表结构无任何要求,既适用于顺序结构,也适用于链式结构,无论记录是否按关键字有序均可应用。
4、缺点:平均查找长度较大,查找效率较低,所以当 n 很大时, 不宜采用顺序查找。
5、有序表和无序表的顺序查找:
查找成功的平均查找长度,为
查找不成功的平均查找长度,为
每个元素的查找概率相同 | ||
无序表 | ||
有序表 |
二、数据元素类型定义
typedef struct{KeyType key; //关键字域InfoType otherinfo; //其他域
}ElemType;typedef struct{ElemType *R; //存储空间基地址,建表时按实际长度分配,0号单元留空int length; //当前长度
}SSTable;
三、算法描述
//在顺序表ST中顺序查找其关键字等于key的数据元素。
//若找到,则函数值为该元素在表中的位置,否则为0int Search_Seq (SSTable ST, KeyType key)
{for(int i = ST.length; i >= 1; --i)if(ST.R[i].key == key) return i; //从后往前找return 0;
}
在查找过程中每步都要检测整个表是否查找完毕,即每步都要有循环变量是否满足条件 i >= 1的检测。改进这个程序,可以免去这个检测过程。改进方法是查找之前先对 ST.R[0] 的关键字赋值 key,在此, ST.R[0] 起到了监视哨的作用,如下面的算法所示。
// 改进版(通过设置监视哨,免去查找过程中每一步都要检测整个表是否查找完毕。)
//在顺序表ST中顺序查找其关键字等于key的数据元素。
//若找到,则函数值为该元素在表中的位置,否则为0int Search_Seq (SSTable ST, KeyType key)
{ST.R[0].key = key; //“哨兵”for(int i = ST.length; ST.R[i].key != key; --i); //从后往前找return i;
}
两个算法的时间复杂度相同,都为 。
四、练习
1、对 n 个元素的表做顺序查找时,若查找每个元素的概率相同,则总查找次数 ,可得平均查找长度为 。
2、对长度为3的顺序表进行查找,若查找的第一个元素的概率为1/2,第二个元素的概率为1/3,第三个元素的概率为1/6,则查找任一元素的平均查找长度为_____5/3_____。
解:
【考研】数据结构考点——顺序查找相关推荐
- 考研数据结构考点之查找
第七章 查找 7.1 顺序查找 7.2 折半查找 7.3 分块查找 7.4 二叉排序树 7.5 平衡二叉树 7.6 B树 7.7 B+树 7.8 散列查找 7.9 折半查找.二叉排序树.平衡二叉树对比 ...
- Python数据结构:顺序查找
顺序查找:从头走到尾 时间复杂度O(n) 代码示例 def linear_search(l,val):for i, v in enumerate(list):# print(i)# print(v)i ...
- (王道408考研数据结构)第七章查找-第二节1:顺序查找及其优化
文章目录 一:顺序查找基本思想 二:效率分析 三:顺序查找优化(针对查找表为有序表) 四:顺序查找优化(针对查找概率不相等) 一:顺序查找基本思想 顺序查找(Sequential Search):又叫 ...
- 【考研】数据结构考点——冒泡排序(含408真题)
前言 本文内容源于对<数据结构(C语言版)>(第2版).王道讲解学习所得心得.笔记整理和总结. 交换排序的基本思想:两两比较待排序记录的关键字,一旦发现两个记录不满足次序要求时则进行交换 ...
- 【考研】数据结构考点——希尔排序
前言 本文内容源于对<数据结构(C语言版)>(第2版).王道讲解学习所得心得.笔记整理和总结. 插入排序的三种方法:直接插入排序.折半插入排序和希尔排序.直接插入排序可基于顺序表或链表操作 ...
- 大话西游之王道考研数据结构第一讲---线性表的顺序表示
大话西游之王道考研数据结构第一讲---线性表的顺序表示 写在前面的话 王道考研数据结构是一本非常好的书,本系列所有的内容是按照其书进行讲述的,所以您可以以那本书作为主要内容,这个做参考. 大学时候,在 ...
- 数据结构源码笔记(C语言):顺序查找
//实现顺序查找的算法 #include<stdio.h> #include<malloc.h> #include<malloc.h>#define MAXL 10 ...
- SDUT-3378_数据结构实验之查找六:顺序查找
数据结构实验之查找六:顺序查找 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 在一个给定的无序序列里,查找与给定关键字 ...
- 数据结构---顺序查找和二分查找
数据结构-顺序查找和二分查找 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> int n;//查找元素数组的长度 vo ...
最新文章
- knn人脸识别判断_WEEK1_LRamp;KNN
- java web 应用目录
- 平台和计算机技术,两大平台技术提升及优势功能PK对比
- 解决:安装Widget插件提醒已安装却不见界面
- IOS 计时器 NSTimer
- 网站如何经过身份验证_如何配置TLS?
- Lync Server 2013 Preview 安装体验(四)安装lync server
- ERP+WMS信息一体化案例:汽车钢板弹簧企业【神风弹簧】
- HTML右下角音乐播放器,利用HTML5实现网页底部音乐播放器代码
- java的运行环境是什么_Java运行环境是什么
- 安装AdventureWorks2008R2
- 不同尺度下耕地土壤Cr含量的空间自相关性分析
- 从文案到配音,只需要一部手机!5分钟掌握影视解说制作流程
- 嵌入式Linux:V3s移植NES游戏,声音,游戏手柄
- Genymotion目前速度最快的Android模拟器+ova包
- 网络接口层协议:ATM
- echart报错echarts/lib/visual/dataColor in ./node_modules/echarts-liquidfill/src/liquidFill.js
- 智和网管工业交换机网管方案
- 简洁高斯朴素贝叶斯分类原理及python实现
- mysql select having_MySQL中SELECT子句WHERE和HAVING的区别