线性表:

  数据排成一条线一样的机构,每个线性表上的数据最多只有前后两个方向,

  包括 数组,链表,队列,栈。

非线性表 :

  数据之间并不是简单的前后关系,有二叉树、图等。

散列表(基于 数组支持按照下标访问数据的特性,是数组的一种扩展)

  通过散列函数把元素的键值 映射为 下标,然后将数据存储在数组中对应下标的位置。

  当按照键值查询元素时时,用同样的散列函数,将键值转化数组下表,从对应的数组下表的位置取数据。

散列表源于数组,他借助散列函数对数组这种数据结构进行扩展,利用的是数组支持 按照下标

随机访问元素的特性,散列表的两个核心问题是 散列函数设计和散列函数冲突

散列表仅支持 添加 、查、 删 不支持修改。

散列函数 可以定义为 hash(key),key表示元素的键值,hash(key)的值表示经过散列函数计算得到散列值。

解决散列冲突的方法

1 开放寻址法

如果出现了散列冲突(就是经过计算完放入的table 有值的情况)就从这个table 往后 找到空位置,插入。

探测新的位置的方法有 线性探测、二次探测、双重探测。

线性探测:存储位置被占用,从当前位置向后查找,有空位置就插入。

   缺点 :如果数据越来越多,耗费的时间就越来越多

二次探测:探测的步长变成了原来的"二次方"

双重探测:用一组散列函数,如果第一个散列函数计算的位置被占了,就用第二个散列函数计算。

2 链表法

散列表中,每个桶或槽 会对应一条链条,所有散列值相同的 元素 我们都放到相同槽位对应的链表中

插入的时候只需要通过计算散列函数计算出对应的散列槽位,将其插入到对应链表中即可。

当查找、删除一个元素时,同样通过散列函数计算出对应的槽,然后遍历链表查找或者删除。

线性表 & 散列表的更多相关文章

  1. JavaScript 哈希表(散列表)应用

    查找的效率与比较次数密切相关.基于比较的程序,运算效率是比较低的.比如平时可以通过indexOf查找一个数据.但这是一个基于比较的一个实现.如果是淘宝那样有上亿个商品,那么用indeOf 来查数据就会 ...

  2. JavaScript 哈希表(散列表)实现和应用

    查找的效率与比较次数密切相关.基于比较的程序,运算效率是比较低的.比如平时可以通过indexOf查找一个数据.但这是一个基于比较的一个实现.如果是淘宝那样有上亿个商品,那么用indeOf 来查数据就会 ...

  3. java资料——哈希表(散列表)(转)

    哈希表       散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度. ...

  4. HashMap、lru、散列表

    HashMap HashMap的数据结构:HashMap实际上是一个数组和链表("链表散列")的数据结构.底层就是一个数组结构,数组中的每一项又是一个链表. hashCode是一个 ...

  5. 散列表(拉链法与线性探测法)Java实现

    package practice; import java.security.Principal; import java.util.Scanner; import edu.princeton.cs. ...

  6. 哈希表(散列表),Hash表漫谈

    1.序 该篇分别讲了散列表的引出.散列函数的设计.处理冲突的方法.并给出一段简单的示例代码. 2.散列表的引出 给定一个关键字集合U={0,1......m-1},总共有不大于m个元素.如果m不是很大 ...

  7. 【Java】 大话数据结构(13) 查找算法(4) (散列表(哈希表))

    本文根据<大话数据结构>一书,实现了Java版的一个简单的散列表(哈希表). 基本概念 对关键字key,将其值存放在f(key)的存储位置上.由此,在查找时不需比较,只需计算出f(key) ...

  8. 数据结构---散列表查找(哈希表)概述和简单实现(Java)

    散列表查找定义 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,是的每个关键字key对应一个存储位置f(key).查找时,根据这个确定的对应关系找到给定值的key的对应f(key) ...

  9. 哈希表(散列表)—Hash表解决地址冲突 C语言实现

    哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.具体的介绍网上有很详 ...

随机推荐

  1. Excel 数据导入至Sqlserver 数据库中 ltrim() 、rtrim() 、replace() 函数 依次空格无效问题

    今天导一些数据从Excel中至Sqlserver 数据库中,在做数据合并去重的时候发现,有两条数据一模一样,竟然没有进行合并: 最后发现有一条后面有个“空格”,正是因为这个“空格”让我抓狂许久,因为它 ...

  2. 测试工程中引入Masonry记录

    测试工程中需要引入Masonry,在进行添加新库时发现了几个问题,记录如下,方便有相同问题的朋友查找解决:   1,podfile中添加 pod ‘Masonry’ 后,pod install --v ...

  3. 0515项目优化和List集合

    0515项目优化和List集合 1. 项目优化 1.1 分析当前情况 问题 数据存储是数组形式,数据类型明确.复用度较低. 需求 Student操作使用的代码,StudentManager想要操作考虑 ...

  4. Jmeter(四) - 从入门到精通 - 创建网络测试计划(详解教程)

    1.简介 在本节中,您将学习如何创建基本的 测试计划来测试网站.您将创建五个用户,这些用户将请求发送到JMeter网站上的两个页面.另外,您将告诉用户两次运行测试.因此,请求总数为(5个用户)x(2个 ...

  5. [SD心灵鸡汤]010.每月一则 - 2016.02

    1.世上只有一种英雄主义,就是在认清生活真相之后依然热爱生活. 2.要想赢,就一定不能怕输.不怕输,结果未必能赢.但是怕输,结果则一定是输. 3.你要做的就是别人换不掉的,那你做不到怪谁,就是你自己没 ...

  6. eatwhatApp开发实战(七)

    之前我们为app添加了读取本地数据的功能和删除的功能.本次我们来将listview上item项的触控修改为item项上单一控件的触控事件.用item项上的button来实现删除数据. 先上布局: &l ...

  7. 选择器&隔行换色

    选择器的使用理解为:执行jQuery核心函数,传入选择器的字符串    $( ... ) 基本选择器 <!DOCTYPE html> <html> <head> & ...

  8. java的Interger自动包装带来的问题

    1 首先看一下以下代码: Integer b=7; Integer c=7; Integer r=234; Integer d=234; System.out.println(b==c); Syste ...

  9. Linux suid 提权

    SUID (Set owner User ID up on execution) 是给予文件的一个特殊类型的文件权限.在 Linux/Unix中,当一个程序运行的时候, 程序将从登录用户处继承权限.S ...

  10. Rocket - devices - CLINT

    https://mp.weixin.qq.com/s/4LfZZDKCTQhiKIUjvbDKEg 简单介绍CLINT的实现. 1. 概述 CLINT即是Core Local Interrupter的 ...