SWUST OJ 1012哈希表(链地址法处理冲突)
哈希表(链地址法处理冲突)
1000(ms) 10000(kb) 2676 / 6911
采用除留余数法(H(key)=key %n)建立长度为n的哈希表,处理冲突用链地址法。建立链表的时候采用尾插法。
输入
第一行为哈西表的长度m;
第二行为关键字的个数n;
第三行为关键字集合;
第四行为要查找的数据。
输出
如果查找成功,输出该关键字所在哈希表中的地址和比较次数;如果查找不成功,输出-1。
样例输入
13
13
16 74 60 43 54 90 46 31 29 88 77 78 79
16
样例输出
3,1
思路如下
- 首先建立一个哈希表,即一个结构体数组,
- 将数组初始化(必做)
- 添加数据,如果用到同一地址就用链表插在后面
- 按照数字计算地址,若不等就查询链表下一节点,直到链表节点为NULL,此时未找到
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}ha;
int main()
{
int m,n;
cin>>m>>n;
ha *q[1005];
// 建立哈希表
for(int i=0;i<m;i++)
{
ha *newNode;
newNode=(ha *)malloc(sizeof(ha));
newNode->next=NULL;
q[i]=newNode;
}
// 存放数据
for(int i=0;i<n;i++)
{
int num;
cin>>num;
int address=num%m;
ha *amb;
amb=q[address];
while(amb->next!=NULL)
{
amb=amb->next;
}
if(amb->next==NULL)
{
ha *p=(ha *)malloc(sizeof(ha));
amb->next=p;
p->data=num;
p->next=NULL;
}
}
// 查找
int num;
cin>>num;
int address=num%m;
ha *p;
p=q[address]->next;
int count=0;
while(p!=NULL)
{
count++;
if(num==p->data)
{
cout<<address<<","<<count;
return 0;
}
p=p->next;
}
cout<<"-1";
return 0;
}
SWUST OJ 1012哈希表(链地址法处理冲突)的更多相关文章
- swust oj 1012
哈希表(链地址法处理冲突) 1000(ms) 10000(kb) 2542 / 6517 采用除留余数法(H(key)=key %n)建立长度为n的哈希表,处理冲突用链地址法.建立链表的时候采用尾插法 ...
- PKU 2002 Squares(二维点哈希+平方求余法+链地址法)
题目大意:原题链接 给定平面上的N个点,求出这些点一共可以构成多少个正方形. 解题思路: 若正方形为ABCD,A坐标为(x1, y1),B坐标为(x2, y2),则很容易可以推出C和D的坐标.对于特定 ...
- 链地址法查找成功与不成功的平均查找长度ASL
晚上,好像是深夜了,突然写到这类题时遇到的疑惑,恰恰这个真题只让计算成功的ASL,但我想学一下不成功的计算,只能自己来解决了,翻了李春葆和严蔚敏的教材没有找到相关链地址法的计算,于是大致翻到两篇不错的 ...
- C# Dictionary源码剖析---哈希处理冲突的方法有:开放定址法、再哈希法、链地址法、建立一个公共溢出区等
C# Dictionary源码剖析 参考:https://blog.csdn.net/exiaojiu/article/details/51252515 http://www.cnblogs.com/ ...
- java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测).链地址法.再哈希.建立公共溢出区 标签: hashmaphashmap冲突解决冲突的方法冲突 2016-0 ...
- POJ 3007 Organize Your Train part II(哈希链地址法)
http://poj.org/problem?id=3007 题意 :给你一个字符串,让你无论从什么地方分割,把这个字符串分成两部分s1和s2,然后再求出s3和s4,让你进行组合,看能出来多少种不同的 ...
- Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
最近时间有点紧,暂时先放参考链接了,待有时间在总结一下: 查了好多,这几篇博客写的真心好,互有优缺点,大家一个一个看就会明白了: 参考 1. 先看这个明白拉链法(链地址法),这个带源码,很好看懂,只不 ...
- 链地址法实现HashMap
前注:本文介绍的HashMap并非Java类库的实现.而是根据哈希表知识的一个实现. 上文介绍了开放地址法实现HashTable,它的缺点是对hashCode映射为地址后如果出现重复地址,则会占用其他 ...
- pigeonhole principle 哈希表的重复问题(冲突)是不可避免的
https://en.wikipedia.org/wiki/Pigeonhole_principle Sock-picking Assume a drawer contains a mixture o ...
随机推荐
- JDK8内存模型—消失的PermGen
一.JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 1.虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建.栈里面存着的是一种叫“栈 ...
- python使用for循环打印9*9乘法表。
代码如下: for a in range(1, 10): for b in range(1, 10): if b <= a: print("%d*%d=%d\t" % (b, ...
- WEB渗透之扫描 - Nikto
2020.0202 好事成双 Nikto 纯主动 识别软件版本 存在安全隐患的文件 配置漏洞 web应用安全隐患 避免404误判 使用 插件:nikto -list-plugins 避免404误判功能 ...
- Golang package轻量级KV数据缓存——go-cache源码分析
作者:Moon-Light-Dream 出处:https://www.cnblogs.com/Moon-Light-Dream/ 转载:欢迎转载,但未经作者同意,必须保留此段声明:必须在文章中给出原文 ...
- css 固比固模型
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 小程序post请求,后台接收不到数据的解决方法
wx.request({ url: 'myurl', method:'POST', dataType:'json', data: { mydata:mydata }, success(res) { c ...
- C3p0连接池-Java(新手)
1 数据库连接池 C3p0 和 Druid 1.1 定义 : 本质上就是个容器(集合) 存放数据库连接的容器 当系统初始化以后 容器被创建 容器中就会申请一些连接对象 当用户来访问的数据库的时候 从容 ...
- Error 不再支持源选项 5。请使用 6 或更高版本。
解决方案:在项目pom.xml中指定JDK版本 我的jdk版本是11.0.2 所以写的是11 根据你自己的jdk版本写 1.7/1.8~~~~ <properties>元素时根元素< ...
- 让 Linux 防火墙新秀 nftables 为你的 VPS 保驾护航
上篇文章 给大家介绍了 nftables 的优点以及基本的使用方法,它的优点在于直接在用户态把网络规则编译成字节码,然后由内核的虚拟机执行,尽管和 iptables 一样都是基于 netfilter, ...
- git 更换push 提交地址
git 删除远程地址 1.找到对应项目 右键点击 GIT Bash Here 2.输入命令 git remote rm origin 3.对应项目 右键点击 GIT Sync..... 4.点击Man ...