SJTU散列表的建立
【问题描述】采用除留余数法构造散列函数H(key) = key mod p,散列表的表长为m,其中p≤m,采用线性探测法处理冲突(当探测到表的最后一个位置仍无空位时,从表的开始位置重新探测)。现将n(n≤m)个互不相同的正整数a1,…,an依次插入到散列表中,要求输出构成的散列表以及在插入每个数时需要探查的次数。
【输入形式】
第一行:参数p,散列表长m,正整数的数目n,每个数用空格隔开;
第二行:n个正整数a1,…,an,每个数用空格隔开。
【输出形式】
第一行:散列表的地址序列(0 1 … m-1),每个数用空格隔开;
第二行:将n个正整数插入到散列表中的结果,每个数用空格隔开;若某个地址中没有数则填为-1;
第三行:每个数在插入时的探查次数;若某个地址中没有数则探查次数为0。
【样例输入】
13 15 11
26 36 41 38 44 15 68 12 6 51 25
【样例输出】
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
26 25 41 15 68 44 6 -1 -1 -1 36 -1 38 12 51
1 5 1 2 2 1 1 0 0 0 1 0 1 2 3
【样例说明】
先将11个正整数(26,36,41,38,44,15,68,12,6,51,25)依次插入到表长为15的散列表中,插入过程中采用H(key) = key mod 13来计算插入到表中的位置,若插入位置已有其他数,则采用线性探测法解决冲突。
例:在计算最后一个数25应该插入的位置时,25 mod 13 = 12,但地址12/13/14均无空位,则从地址0开始重新探测,直到地址1有空位,则在地址1中插入25。此时由于依次探查过地址12/13/14/0/1,所以探查次数为5。
#include <iostream>
using namespace std;int main()
{struct node {int data;int count = 0;node() { data = -1; }};int p, m, n;cin >> p >> m >> n;node* array = new node[m];int* a = new int[n];for (int i = 0; i < n; ++i) {cin >> a[i];int pos = a[i] % p;int initCount = 1;// collisionwhile (array[pos].data != -1) {pos = (pos + 1) % m;initCount++;}array[pos].data = a[i];array[pos].count = initCount;}for (int i = 0; i < m; ++i) {cout << i << ' ';}cout << endl;for (int i = 0; i < m; ++i) {cout << array[i].data << ' ';}cout << endl;for (int i = 0; i < m; ++i) {cout << array[i].count << ' ';}delete [] array;delete [] a;return 0;
}
SJTU散列表的建立相关推荐
- 散列表查找(哈希表)
散列函数构造经常要考虑: 1.散列表的长度 2.关键字的长度 3.关键字的分布情况 4.计算散列函数所需的时间 5.记录的查找频率 一个"好"的散列函数应遵循一下两条原则 (1)函 ...
- 散列表(也叫哈希表),
google搜索到的头条:散列表(也叫哈希表),是根据关键码值直接进行访问的数据结构,也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组 ...
- 【Python算法】哈希存储、哈希表、散列表原理
哈希表的定义: 哈希存储的基本思想是以关键字Key为自变量,通过一定的函数关系(散列函数或哈希函数),计算出对应的函数值(哈希地址),以这个值作为数据元素的地址,并将数据元素存入到相应地址的存储单元中 ...
- [数据结构]-散列表(哈希表)
在这里没有新的原创性的东西.该部分内容主要取材于<软件设计师教程>部分的内容. 我想强调一种数据结构,散列表.它是基于快速存取的角度设计的,也是一种典型的"空间换时间 ...
- 查找 之 散列表查找(哈希表)
基础概念 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key).这里对应关系f称为散列函数,又称为哈希(Hash)函数. 采用散列技术将 ...
- 哈希表(散列表)的介绍,代码实现
百度百科介绍的哈希表: 哈希表(Hash table,也叫散列表):是根据键(Key)而直接访问在内存存储位置的数据结构.也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访 ...
- 哈希表(散列表)知识点概述
引言 在查找数据过程中,有很多种方法,但是大部分都是通过数据间的比较进行的,有没有一种方法可以直接通过关键字得到要查找的数据的位置的方法呢?这就需要用到一种新的查找方法,散列查找法: 基本思想 记录存 ...
- hashmap是散列表吗_一篇文章教你读懂哈希表-HashMap
题图Pid=68670770 在最近的学习过程中,发现身边很多朋友对哈希表的原理和应用场景不甚了解,处于会用但不知道什么时候该用的状态,所以我找出了刚学习Java时写的HashMap实现,并以此为基础 ...
- 【Java】 大话数据结构(13) 查找算法(4) (散列表(哈希表))
本文根据<大话数据结构>一书,实现了Java版的一个简单的散列表(哈希表). 基本概念 对关键字key,将其值存放在f(key)的存储位置上.由此,在查找时不需比较,只需计算出f(key) ...
最新文章
- 医疗影像处理:去除医疗影像中背景的影响2D/3D【numpy-code】| CSDN博文精选
- JavaWeb实现分页的四种方法
- Google 工程师:为什么 CDN 对移动客户端加速“没有”效果
- php 预处理原理,PHP的PDO对象预处理的2种实现方法,实现原理详解
- 外卖和快递行业数据_下周一起,整治全面启动!锁定全市外卖、快递行业!
- 美女晕倒怎么办?二哈:这不是一滋就醒......
- 大数据分析要学习什么_为什么要学习数据分析
- 【案例】保健品行业如何优化供应链管理?APS系统来帮忙
- Ansible 详细用法部署安装
- 拼接sql语句参数绑定
- PostgreSQL快速入门
- 梦笔记2021-03-05
- 自己做的小游戏希望大家能喜欢
- java学生管理系统遇到的难题_学生信息管理系统错误总结
- Mysql 数据库操作系统 官网 安装教程
- openwrt路由器打印机服务器设置_OPENWRT网络打印机TCP/IP共享设置教程 以703N为例...
- VINS-Mono 论文公式推导与代码解析
- 干货分享|如何使用小鸟云服务器搭建Wordpress站点
- 2018年上半年综合素质作文
- Oracle 19c遇到ORA-XXXX:????的问题的解决方案