9.1 查找表:静态查找表

article/2025/9/16 22:22:33

9.1 查找表:静态查找表.
9.2 查找表:动态查找表.
9.3 查找表:哈希表.

9.1 查找表:静态查找表

  • 1 基本概念
  • 2 抽象数据类型
  • 3 顺序查找表
    • 3.1 顺序存储结构模块中的实现
    • 3.2 分析顺序查找的时间性能.
  • 4 有序查找表
    • 4.1 代码实现
    • 4.2 折半查找的平均查找长度
  • 5 静态查找树表
  • 6 索引顺序表

1 基本概念

查找表(Search Table)是由同一类型的数据元素(或记录)构成的集合。

对查找表经常进行的操作:
1)查询某个特定的数据元素是否在查找表中。
2)检索某个特定的数据元素的各种属性。
3)在查找表中插入一个数据元素。
4)从查找表中删去某个数据元素。

静态查找表(Static Search Table):仅做 “查询”、“检索” 操作的查找表。
动态查找表(Dynamic Search Table):查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已存在的某个数据元素的查找表。

查找
根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或(记录)。
若查找表中存在这样一个记录,则称“查找成功”,查找结果:给出整个记录的信息,或指示该记录在查找表中的位置;
否则称“查找不成功”,查找结果:给出“空记录”或“空指针”。

关键字
是数据元素(或记录)中某个数据项的值,用以标识(识别)一个数据元素(或记录)。
若此关键字可以识别唯一的一个记录,则称之谓“主关键字"。
若此关键字能识别若干记录,则称之谓“次关键字”。

以后各节的讨论中,涉及的关键字类型和数据元素类型统一说明如下:
典型的关键字类型说明可以是

typedef float KeyType; //实型
typedef int KeyType; //整型
typedef char *KeyType; //字符串型

数据元素类型定义为:

typedef struct {KeyType key; //关键字域...			 //其他域
}SElemType;

对两个关键字的比较约定为如下的宏定义:

//--对数值型关键字
#define EQ(a, b) ((a) == (b))
#define LT(a, b) ((a) < (b))
#define LQ(a, b) ((a) <= (b))
//--对字符串型关键字
#define EQ(a, b) (!strcmp((a), (b)))
#define LT(a, b) (strcmp((a), (b)) < 0)
#define LQ(a, b) (strcmp((a), (b)) <= 0)
int strcmp(const char* str1,const char* str2);
返回值:
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。

如何进行查找?
取决于查找表的结构
然而,查找表本身是一种很松散的结构,因此,为了提高查找的效率,需要在查找表中的元素之间人为地附加某种确定的关系。换句话说,用另外一种结构来表示查找表。

2 抽象数据类型

ADT StaticSearchTable {
数据对象D:
D是具有相同特性的数据元素的集合。各个数据元素均含有类型相同,可惟一标识数据元素的关键字。

数据关系R:
数据元素同属一个集合。

基本操作P:
Create(&ST, n);
操作结果:构造一个含n个数据元素的静态查找表ST。

Destroy(&ST);
初始条件:静态查找表ST存在。
操作结果:销毁表ST。

Search(ST, key);
初始条件:静态查找表ST存在,key为和关键字类型相同的给定值。
操作结果:若ST中存在其关键字等于key的数据元素,则函数值为该元素的值或在表中的位置,否则为“空”。

Traverse(ST, Visit());
初始条件:静态查找表ST存在, Visit是对元素操作的应用函数。
操作结果:按某种次序对ST的每个元素调用函数Visit()一次且仅一次。一旦Visit()失败,则操作失败。

} ADT StaticSearchTable

假设静态查找表的顺序存储结构

typedef struct {ElemType *elem; //数据元素存储空间基址,建表时按实际长度分配, 0号单元留空int length; //表的长度
} SSTable;

3 顺序查找表

以顺序表或线性链表表示静态查找表

3.1 顺序存储结构模块中的实现

int Location(SqList L, ElemType &e, Status (* compare)(ElemType, ElemType)){k = 1;p = L.elem;while(k<=L.length && !(*compare)(*p++,e)){k++;}if(k<=L.length){return k;}else{return 0;}
}//Location

以上查找过程中每一步都需要检测整个表是否查找完毕。
现优化如下:

int Search_Seq(SSTable ST, KeyType key){//在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为0.ST.elem[0].key = key; //哨兵for(i=ST.length; ST.elem[i].key!=key, --i); //从后往前找return i; //找不到时, i为0
}//Search_Seq

3.2 分析顺序查找的时间性能.

平均查找长度定义:为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值称为查找算法在查找成功时的平均查找长度(Average Search Length)。

对于含有n个记录的表,查找成功时的平均查找长度为 A S L = ∑ i = 1 n P i C i ASL=\displaystyle\sum_{i=1}^{n}P_{i}C_{i} ASL=i=1nPiCi
其中:
n 为表长。
P i P_{i} Pi 为查找表中第i个记录的概率,且 ∑ i = 1 n P i = 1 \displaystyle\sum_{i=1}^{n}P_{i}=1 i=1nPi=1
C i C_{i} Ci 为找到表中其关键字与给定值相等的第i个记录时,和给定值已进行过比较的关键字个数。显然, C i C_{i} Ci 随查找过程不同而不同。

若查找概率无法事先测定,则查找过程采取的改进办法是,在每次查找之后,将刚刚查找到的记录直接移歪表尾的位置上。

4 有序查找表

上述顺序查找表的查找算法简单,但平均查找长度较大,特别不适用于表长较大的查找表。

4.1 代码实现

//折半查找
int Search_Bin(SSTable ST, KeyType key){//在有序表ST中折半查找其关键字等于key的数据元素。//若找到,则函数值为该元素在表中的位置,否则为0。low = 1; high = ST.length;//置区间初值while(low <= high) {mid = (low + high) / 2;if(EQ(key, ST.elem[mid].key)){return mid;//找到待査元素}else if(LT(key, ST.elem[mid].key)){ //待查关键字小于 中间记录的关键字high = mid - 1; //继续在前半区间进行查找}else{low = mid + 1;//继续在后半区间进行查找}}return 0; //顺序表中不存在待查元素 
}//Search_Bin

4.2 折半查找的平均查找长度

待整理

5 静态查找树表

待整理

6 索引顺序表

待整理



——《数据结构图 (C语言版) 严蔚敏》 学习笔记


http://chatgpt.dhexx.cn/article/TSFIcec7.shtml

相关文章

数据结构----查找表

前言 突然发现自己过得茫茫然&#xff0c;学过的东西&#xff0c;似懂非懂&#xff0c;不知所以。昨晚打开以前瞎写 的博客&#xff0c;又来了兴趣。 人在反思中成长&#xff0c;在总结中进步。加油&#xff01;目录 前言 查找表 正文静态查找表顺序查找表有序查找表索引查找表…

sql server查找表的字段信息

查找表的字段信息 SELECT (case when a.colorder1 then d.name else end) N表名, a.colorder N字段序号, a.name N字段名, (case when COLUMNPROPERTY( a.id,a.name,IsIdentity)1 then √else end) N标识, (case when (SELECT count(*) FROM sysobjects WHERE (name in (SEL…

算法——查找表

查找&#xff0c;根据一个值查找另一个值&#xff0c;value值可以是容器&#xff0c;结构&#xff0c;这样可查找的元素就更多&#xff1b; 哈希冲突&#xff1a; 主关键字&#xff1a;可以唯一的标识一个记录的关键字&#xff0c;如准考证号&#xff1b; 此关键词&#xff…

LUT 查找表(Look-Up-Table)

LUT就是查找表&#xff0c;对于4输入的LUT而言&#xff0c;实际上就是4位地址位&#xff0c;一位数据位的存储器&#xff0c;能够存储16位数据&#xff0c;所以我们在FPGA设计中可以用LUT组建分布式的RAM。 如果用传统的逻辑来实现一个4输入的逻辑电路&#xff0c;需要大致三个…

查找表(LUT,Look-up Table)的简单理解

查找表&#xff08;LUT&#xff0c;Look-up Table&#xff09;的简单理解 引入&#xff1a;假设有一个 4 输入(a,b,c,d) 1 输出(o) 的逻辑单元&#xff0c;想要了解其内部结构。 输入按照 0000-1111 去遍历&#xff0c;记录输出。得到真值表&#xff0c;运用卡诺图对其化简&a…

查找表算法

查找表是由同一类型的数据元素构成的集合。 一般对于查找表有一下几种操作&#xff1a; 1、在查找表中查找某个具体的数据元素&#xff1b; 2、在查找表中插入数据元素&#xff1b; 3、从查找表中删除数据元素。静态查找表和动态查找表在查找表中只做查找操作&#xff0c;不带动…

数据结构之查找表

前言 今天学习数据结构看到了一个词-静态查找表&#xff0c;还有与之对应的动态查找表&#xff0c;然后我发现。 啊&#xff0c;这是个啥&#xff0c;好像知道又好像不知道&#xff0c;不就是查找吗&#xff0c;干嘛弄这些专业的说法&#xff0c;回头翻了一下数据结构的书&am…

数据结构查找表详解(包含常用查找算法)

** 1. 什么是查找表 ** 在日常生活中&#xff0c;几乎每天都要进行一些查找的工作&#xff0c;在电话簿中查阅某个人的电话号码&#xff1b;在电脑的文件夹中查找某个具体的文件等等。本节主要介绍用于查找操作的数据结构——查找表。 查找表是由同一类型的数据元素构成的集…

FPGA工作原理

一.查找表&#xff08;Look-Up-Table)的原理与结构 采用这种结构的PLD芯片我们也可以称之为FPGA&#xff1a;如altera的ACEX,APEX系列,xilinx的Spartan,Virtex系列等。 查找表&#xff08;Look-Up-Table)简称为LUT&#xff0c;LUT本质上就是一个RAM。 目前FPGA中多使用4输入的…

FPGA知识积累【3】

目录 1.查找表&#xff08;LUT&#xff09;原理与结构2.FPGA基本结构3.FPGA的RAM、ROM、CAM4.硬件语言的层次5.寄生效应6.线与逻辑7.竞争冒险8.消除竞争冒险的方法 1.查找表&#xff08;LUT&#xff09;原理与结构 ①查找表简称LUT&#xff0c;本质上就是一个RAM。目前FPGA中多…

数据结构导论【六】之 查找表

感谢内容提供者&#xff1a;金牛区吴迪软件开发工作室 接上一篇&#xff1a;数据结构导论【五】之 图 文章目录 一、基本概念二、静态查找表的实现1.顺序表上的查找 -- 顺序查找a.过程b.算法c.算法分析 2.有序表上的查找 -- 二分查找a.二分查找思想b.二分查找过程c.二分查找算法…

查找表(Lookup table)

查找表&#xff08;look-up-table&#xff09;这个名字很好听&#xff0c;缩写 LUT&#xff0c;听起来很高端&#xff0c;其实是一种很简单高效的索引操作&#xff0c;今天简单介绍一下。 是啥 wiki定义&#xff1a; a lookup table is an array that replaces runtime computa…

从底层结构开始学习FPGA(2)----LUT查找表

文章目录 系列目录与传送门 一、概述 二、实现原理 系列目录与传送门 《从底层结构开始学习FPGA》目录与传送门 一、概述 记得刚接触FPGA的时候&#xff0c;总能看见类似这样的一句话----FPGA是基于查找表LUT的可编程逻辑器件。FPGA常常被人比作“数字积木”&#xff0c;就是因…

码,主码,主属性,非主属性,平凡函数依赖,完全依赖等词解释

码&#xff1a;代表数目的符号 主码 我们在建立数据库的时候&#xff0c;需要为每张表指定一个主码&#xff0c;主码也叫主键。 所谓主码就是在实体集中区分不同实体的候选码。 一个实体集中只能有一个主码&#xff0c;但可以有多个候选码。 必须注意两点&#xff1a; 1.主…

SpringBoot项目打jar后执行jar包提示:xx没有主属性清单 解决

SpringBoot项目打jar包后执行jar包提示&#xff1a;xx没有主属性清单 解决 今天在练习SpringBoot项目打jar包部署的时间遇见了一个问题&#xff1a;jar中没有主属性清单&#xff0c;对此也是比较疑惑&#xff0c;在百度之后找到了解决方式 主属性清单是jar包中MANIFEST.MF文件中…

【图示化】SQL Server概念:超键(码)、候选键(候选码)、主键(主码)、主属性与非主属性、外键

关系模型概念 字段属性名&#xff0c;每一行就是一条记录一个元组&#xff0c;每个单元格就是一个分量&#xff0c; 主键&#xff0c;外键 主码主键主关键字 超键&#xff08;码&#xff09;&#xff0c;候选键 码超键 超键 &#xff08;唯一的&#xff0c;可多余&#xff09; …

候选码、主码、全码、外码、主属性、主键、主关键字、非主属性

一、讲解 首先说明 键字码字&#xff0c;所以 主键主码主关键字&#xff0c;候选键候选码候选关键字… 所谓关系键&#xff0c;指的是一个表中的一个&#xff08;或一组&#xff09;属性&#xff0c;用来标识该表的每一行或与另一个表产生联系。 话不多说&#xff0c;上图&a…

软考系列之候选码,主码,主属性,非主属性详讲

候选码&#xff0c;主码&#xff0c;主属性&#xff0c;非主属性详讲 文章目录 目录 文章目录 前言 一、候选码&#xff0c;主码&#xff0c;属性&#xff0c;非主属性的定义 二、具体题目 三、补充 前言 软考刷题&#xff0c;遇到这系列的题目&#xff0c;对我来讲&#xff0…

数据库中主键、主码、主属性、关键字、候选关键字、码的区别

码是数据库系统中的基本概念&#xff0c;所谓码就是能唯一标识实体的属性&#xff0c;它是整个实体集的性质&#xff0c;而不是单个实体的性质。它包括超码、候选码和主码。 &#xff08;1&#xff09;超码是一个或多个属性的集合&#xff0c;这些属性可以让我们在一个实体集中…

函数依赖 主码 主属性 非主属性 候选键 超键 详解

最近做项目要搞数据库看到范式那一节头脑发晕&#xff0c;概念都忘了&#xff0c;于是从网上搜罗并整理一下&#xff1b; 函数依赖部分参考&#xff1a;https://blog.csdn.net/jsj13263690918/article/details/79796275 主码&#xff1a;主关键字&#xff08;主键&#xff0c;…