《数据结构》_8跳表和散列表

跳表

  跳表是一个包含n个元素的单链表,且满足以下条件:

    (1)在单链表的结点中,每隔2i个元素,就增加一个i级指针,0≤i≤?log2n?;

    (2)其头节点为Head,是一个大小为?log2n?的一维指针数组,里面只存放指向i级的第一个级指针,0≤i≤?log2n?,不存放实际数据元素,它和同i级的指针构成一个存放指针的i级单链表;

    (3)其尾结点为Tail,是一个可以存放实际数据元素的指针,通常该元素值设为一个较大的数值,作为查找退出的哨兵。

可以借鉴博客https://blog.csdn.net/sinat_35261315/article/details/62890796

等以后有时间了,我自己写一下。

散列表

散列函数:一种可以在元素关键字的值和该元素的存储位置之间建立映射的函数,即Loc=HF(Key)。

散列表:是一段连续的内存空间,考虑是连续的有限内存空间,使用顺序存储结构来实现。

冲突:不同关键字经过散列函数映射到相同地址的现象。关键字称为同义词。

散列表基本操作的实现

1.开放地址散列方法

 Locj=(HF(Key)+dj)%m

顺序探测法:dj =1,2,3,···,m-1

二次探测法:dj =1的平方,- 1的平方,2的平方,- 2的平方,···

伪随机探测法

双散列法:dj =j*HF2(Key)

原文地址:https://www.cnblogs.com/WittPeng/p/9132113.html

时间: 2024-11-09 05:22:03

《数据结构》_8跳表和散列表的相关文章

数据结构---哈希表(散列表)

我们在Java容器中谈到:有哈希表(也称为散列表)支持的HashMap.LinkedHashSet等都具有非常高的查询效率.这其中就是Hash起的作用.顺序查找的时间复杂度为O(N) ,二分查找和查找树的时间复杂度为O(logN),而 哈希表的时间复杂度为O(1) .不过这只是理想状态,实际并不那么完美. 1.哈希表的概念和思想 哈希表是唯一的专用于集合的数据结构.可以以常量的平均时间实现插入.删除和查找. 哈希表的思想是:用一个与集合规模差不多大的数组来存储这个集合,将数据元素的关键字映射到数

存储系统的基本数据结构之一: 跳表 (SkipList)

在接下来的系列文章中,我们将介绍一系列应用于存储以及IO子系统的数据结构.这些数据结构相互关联又有着巨大的区别,希望我们能够不辱使命的将他们分门别类的介绍清楚.本文为第一节,介绍一个简单而又有用的数据结构:跳表 (SkipList) 在对跳表进行讨论之前,我们首先描述一下跳表的核心思想. 跳表(Skip List)是有序线性链表的一种.通常对线性链表进行查找需要遍历,因而不能很好的使用二分查找这样快速的方法(想像一下在链表中定位中间元素的复杂度).为了提高查找速率,我们可以将这些线性链表打散,组

数据结构与算法分析-分离链接散列表的实现

#include<stdio.h> #include<math.h> typedef char* ElementType; typedef unsigned int Index; #define MinTableSize 15 struct ListNode; typedef struct ListNode *Position; struct HashTbl; typedef struct HashTbl *HashTable; HashTable InitializeTable(

哈希表(散列表)查找

1.什么是哈希技术? 哈希技术是在记录的存储位置和记录的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key). 查找时,根据这个确定的对应关系找到给定值的映射f(key),若查找集合中存在这个记录,则必定在f(key)的位置上. 哈希技术既是一种存储方法,也是一种查找方法. 2.什么是哈希表? 采用哈希技术将记录存储在一块连续的存储空间中,这块连续的存储空间叫做哈希表(散列表) 哈希表是基于数据来实现的,提供了快速的插入和删除操作. 3.六种哈希函数的构造方法:

数据结构与算法分析-开放定址散列表的实现

#include<stdio.h> #include"fatal.h" typedef char* ElementType; typedef unsigned int Index; typedef Index Position; struct HashTbl; typedef struct HashTbl *HashTable; HashTable InitializeTable(int TableSize); void DestroyTable(HashTable H);

程序员,你应该知道的数据结构之跳表

跳表的原理 跳表也叫跳跃表,是一种动态的数据结构.如果我们需要在有序链表中进行查找某个值,需要遍历整个链表,二分查找对链表不支持,二分查找的底层要求为数组,遍历整个链表的时间复杂度为O(n).我们可以把链表改造成B树.红黑树.AVL树等数据结构来提升查询效率,但是B树.红黑树.AVL树这些数据结构实现起来非常复杂,里面的细节也比较多.跳表就是为了提升有序链表的查询速度产生的一种动态数据结构,跳表相对B树.红黑树.AVL树这些数据结构实现起来比较简单,但时间复杂度与B树.红黑树.AVL树这些数据结

【Python算法】哈希存储、哈希表、散列表原理

哈希表的定义: 哈希存储的基本思想是以关键字Key为自变量,通过一定的函数关系(散列函数或哈希函数),计算出对应的函数值(哈希地址),以这个值作为数据元素的地址,并将数据元素存入到相应地址的存储单元中. 查找时再根据要查找的关键字采用同样的函数计算出哈希地址,然后直接到相应的存储单元中去取要找的数据元素即可. 哈希表的应用: 哈希表(hash table)是实现字典操作的一种有效的数据结构. 尽管最坏的情况下,散列表中查找一个元素的时间与链表中查找的时间相同,达到了O(n). 然而实际应用中,散

数据结构:跳表

1.理想情况 在一个使用有序链表描述的具有n个元素的字典中进行搜索,至多需要n次比较.如果在链中部节点加一个指针,则比较次数可以减少到n/2+1.搜索时,首先将要搜索的元素与中间节点进行比较,如果该元素较小,则仅需搜索链表的左半部分.否则,只需搜索又半部分. 以上图为例,如果要搜索的数为26,则将26先与40比较,因为26<40,因此只需要搜索40的左边元素. 而如果在左半部分和右半部分再增加一个中间指针,则可以进一步减小搜索范围(b). 初始的链称为0级链,如上图中的全部节点. 至少指向2个节

数据结构(十二)散列表

定义 以下简称hahs 应用场景 适合查找与给定值相同的数据,不适合做范围查找,1对多映射查找 问题 冲突,散列表的理论依据是每个不同的关键字通过散列算法得到的结果都是唯一的,而现实中有可能出现几个结果相同的关键字. hash算法 构造一个散列算法考虑几个方面 直接定址法 按如下公式计算出关键字的hash值,当原始的key不重复,则得到的hash值就不会冲突 数字分析法 抽取关键字的一部分作为hash值 例如手机号,一般可以取后4位或者后4位的变形作为hash值,(公司内部场景) 平方取中法 折