线性表:

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

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

非线性表 :

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

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

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

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

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

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

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

散列函数 可以定义为 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. 关于字符串函数size()的问题

    首先如果你是一段语句 for(int i=0;i<a.size();i++)这个时候会报错 comparison between signed and unsigned integer expr ...

  2. git :error: bad signature fatal: index file corrupt

    删除.git/index文件再执行: git reset 不行的话就执行: git read-tree  --empty https://stackoverflow.com/questions/213 ...

  3. 201771010128王玉兰《面向对象与程序设计(Java)》第十七周学习总结

    第一部分:理论基础 线程的同步 多线程并发运行不确定性问题解决方案:引入线 程同步机制,使得另一线程要使用该方法,就只 能等待. 在Java中解决多线程同步问题的方法有两种: - Java SE 5. ...

  4. 【Java】手把手理解CAS实现原理

    先来看看概念,[CAS] 全称“CompareAndSwap”,中文翻译即“比较并替换”. 定义:CAS操作包含三个操作数 —— 内存位置(V),期望值(A),和新值(B). 如果内存位置的值与期望值 ...

  5. Mysql添加更新删除数据-表

    例如 此处拥有一个表名为 uuser 为表添加新数据 ,'); ,'); ,'); 假如只想添加uid和uname ,'小张'); 那么pas自动填充为NULL. 为表更新数据 这里把小王的pas改成 ...

  6. Mybaties 的缓存

    1.mybaties 默认会话是一级缓存,没有开启二级缓存.开启方式在mapper文件中设置<cache /> 2.<cache eviction="LRU" f ...

  7. 调用 start_kernel

    步骤 1 关闭中断.进入 SVC 模式 ENTRY(stext) THUMB( adr r9, BSYM(1f) ) @ Kernel is always entered in ARM. THUMB( ...

  8. 基于Unity实现油画风格的着色器

    // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "Cust ...

  9. SpringBoot入门系列(十二)统一日志收集

    前面介绍了Spring Boot 异常处理,不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html. 今 ...

  10. Tortoise svn 基础知识

    1 不跟踪文件.文件夹 1.1  文件.文件夹已经被svn跟踪 将本地文件.文件夹删除(windows删除文件的删除,快捷键是shift+delete),然后执行svn  update 将服务器同步到 ...