浅谈数据结构-查找

在上万条数据中,查找制定元素,这就是查找完成的功能。

查找表:由同一种类型元素构成的集合,由于“集合”中数据元素之间存在松散的关系,因此查找表是一种灵活应用的数据结构。

查找表的操作:

  1. 查询某个特定的数据元素是否在查找表中。
  2. 查询某个特定元素的各种属性。
  3. 在查找表中制定位置插入一条数据。
  4. 从查找表中删除特定的数据元素。

查找表中四个操作之间是紧密关联的,比如,插入一个数据:首先判断元素是否在查找表中,有,返回,没有插入。判断一个元素在查找表中,先是查找元素,然后获取属性,然后和插入的元素进行比较,相等表示有。删除同样的道理。在后续的章节中会讨论到,在查找表创建时,往往是有顺序的,所以插入和删除时不能打乱查找表中各个元素的顺序。

查找算法通常需要两个输入:

1、被查找的序列

2、要查找的关键词

查找算法的输出参数和返回值:

1、返回类型为 Error_code 的值用以表示是否查找成功

2、如果查找成功,返回 success, 输出参数 position 定位到目标所在位置

3、如果查找失败,返回 not present,输出参数可能是未定义或不同于已有位置的任何值

一、查找表分类

按照记录在表中的位置和特关键词之间的关系分为:静态查找表、动态查找表和Hash表

静态查找表:仅作查询和检索操作的表。

动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的数据元素。

Hash表:根据设定的Hash函数和所选中的处理冲突方法,将一组关键词映像到一个有限的、地址连续的地址集,并以关键字在地址集中的映像作为相应的记录在表中的存储位置,如此构造所得查找表称之为“hash”表。

对于静态表查找,经常用线性表结构来组织数据,这样可以使用顺序查找算法,如果再对主关键词排序,则可以用折半查找等技术进行高级查找。

动态表查找,比较复杂,在完成静态表查找操作情况下,增加了插入和删除工作,可以考虑二叉排序树的查找技术。

hash表中记录在表中的位置和它关键词之间通过hash函数建立一定的关系,当然用hash查找技术。

查找性能分析:通常把关键词的最多比较次数和平均比较次数作为基本的技术指标,前者叫最大查找长度,后者叫平均查找长度。

二、查找算法

查找在我们生活中无处不在,比如查公交,查机票,查酒店。。。这些都是查找。

查找算法分为:

在后续的章节中会重点介绍这几种查找算法。

时间: 2024-10-10 08:44:56

浅谈数据结构-查找的相关文章

浅谈数据结构-二叉树

浅谈数据结构-二叉树 二叉树是树的特殊一种,具有如下特点:1.每个结点最多有两颗子树,结点的度最大为2.2.左子树和右子树是有顺序的,次序不能颠倒.3.即使某结点只有一个子树,也要区分左右子树. 一.特殊的二叉树及特点 1.斜树 所有的结点都只有左子树(左斜树),或者只有右子树(右斜树).这就是斜树,应用较少 2.满二叉树 所有的分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层上,这样就是满二叉树.就是完美圆满的意思,关键在于树的平衡. 根据满二叉树的定义,得到其特点为: 叶子只能出现

浅谈数据结构-树

树是一种数据结构,其中一个元素可以有两个或者多个数据元素,具有一对多的特点,用树结构来存储文件. 树的概念 结点的度:子结点的个数.例如结点1中有3个子结点,结点1的度是3. 树的度:树的度等于所有结点度中度最高的值.结点最高的度为3,树的度为3. 叶子结点:度为0的结点,即没有子结点的结点.例如:上图中3,5,6,7,9,10. 分支结点:除了叶子结点以外的结点,即度不为0的结点.例如:上面树的分支结点为1,2,4,8. 内部结点:除了根结点以及叶子结点或在分支结点的基础之上在去掉根结点.例如

python学习-09(查找、排序和浅谈数据结构)

查找的方法: 排序的方法: 简单的数据结构: 一.算计基础 1.1.什么是算法: 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出.如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题.不同的算法可能用不同的时间.空间或效率来完成同样的任务.一个算法的优劣可以用空间复杂度与时间复杂度来衡量. 简单的说,算法就是一个计算的过程,解决问题的

浅谈数据结构之线性表顺序存储(一)

 首先,数据结构是由某一数据元素集合及该集合中所有数据元素之间的关系组成.具体来说,数据结构应当包含三方面的内容:(1).数据的逻辑结构:(2).数据的存储结构:(3).对数据所施加的操作.而数据的存储结构形式有两种:顺序存储与链式存储.在这里,先谈一谈线性表的顺序存储. 线性表:零个或多个数据元素的有限序列.第一,它是一个序列,也就是说,元素之间是有顺序的:第二,它是有限的,即元素个数是有限的.而线性表的顺序存储结构,说白了,就是在内存中找块地,通过占位的形式把一定的内存空间给占了,然后把相同

Java学习笔记——浅谈数据结构与Java集合框架(第一篇、List)

横看成岭侧成峰,远近高低各不同.不识庐山真面目,只缘身在此山中. --苏轼 这一块儿学的是云里雾里,咱们先从简单的入手.逐渐的拨开迷雾见太阳.本次先做List集合的三个实现类的学习笔记 List特点:有序,元素可重复.其实它的本质就是一个线性表(下面会说到) 先上图,Java集合有Collection体系和Map体系: 然后简单介绍一下数据结构和算法: 数据结构就是数据和数据之间的关系,好比分子结构,晶体结构.碳原子按照一定的方式组合在一起形成碳分子,碳分子再按照一定方式形成晶体. 算法是对解题

浅谈数据结构(一) 线性表 Lists

一.vector和list 线性结构中,比较重要的有 vector和list,这两个都是C++的标准模板库(C++ Standard Template Library)中的库文件. 访问操作,查找和删除 vector可以提供下标访问,即v[i]的方式,所以索引方便.然而如果要插入数据,尤其是在下标小的地方插入,需要把其后面所有的数据全部都往后移动一位,因此代价非常高.同样的,删除数据也是这样. list在C++中指的是双向链表,由于是指针访问,因此元素的插入和删除代价较小,只要改变几个指针即可.

浅谈数据结构:哈希表

一.  基本概念 哈希表(hash table )是一种根据关键字直接访问内存存储位置的数据结构,通过哈希表,数据元素的存放位置和数据元素的关键字之间建立起某种对应关系,建立这种对应关系的函数称为哈希函数 二.哈希表的构造方法 假设要存储的数据元素个数是n,设置一个长度为m(m > n)的连续存储单元,分别以每个数据元素的关键字Ki(0<=i<=n-1)为自变量,通过哈希函数hash(Ki),把Ki映射为内存单元的某个地址hash(Ki),并将数据元素存储在内存单元中 从数学的角度看,哈

浅谈数据结构-平衡二叉树

平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树.1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树.平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删除一个节点使得高度之差大于1,就要进行节点之间的旋转,将二叉树重新维持在一个平衡状态.这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(

浅谈数据结构系列 栈和队列

计算机程序离不开算法和数据结构,在数据结构算法应用中,栈和队列应用你比较广泛,因为两者在数据存放和读取方面效率比较高,本章节重点讲解两者的基本概念和实现. 基本概念 栈:是一种先进后出,后进先出的数据结构,本质上是线性表,只是限制仅允许在表的一段进行插入和删除工作.此端为栈顶,这是在栈中应用很关键的概念.所有数据的处理都是在栈顶进行的,进栈时,栈中元素增加,栈顶上移一位,出栈时栈顶下移一位.应用中比如:洗碗,每次洗干净的碗放在上面-进栈,取碗,从顶上取出一个-出栈:装子弹-进栈,开枪-出栈. 队