哈希表(链地址法处理冲突)

1000(ms)
10000(kb)
2542 / 6517
采用除留余数法(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
 #include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<list>
#define rep(i,a,b) for(int i=a;i<b;i++)
using namespace std;
typedef int KeyType;
typedef struct node
{
KeyType key;
struct node *next;
}NodeType;
typedef struct{
NodeType *firstp;
}HashTable; void InsertHT(HashTable ha[],int &n,int p,KeyType k)
{
int adr;
adr=k%p;
NodeType *q,*r;
q=(NodeType *)malloc(sizeof(NodeType));
q->next=NULL;
q->key=k;
if(ha[adr].firstp==NULL)
ha[adr].firstp=q;
else
{
r=ha[adr].firstp;
while(r->next!=NULL)
{
r=r->next;
}
r->next=q;
}
n++;
} void creatHT(HashTable ha[],int &n,int m,int p,KeyType keys[],int nl)
{
rep(i,,m)
ha[i].firstp=NULL;
n=;
rep(i,,nl)
InsertHT(ha,n,p,keys[i]);
} bool DeleteHT(HashTable ha[],int &n,int m,int p,KeyType k)
{
int adr;
adr=k%p;
NodeType *q,*preq;
q=ha[adr].firstp;
if(q==NULL)
return false;
if(q->key==k)
{
ha[adr].firstp=q->next;
free(q);
n--;
return true;
}
preq=q;
q=q->next;
while(q!=NULL)
{
if(q->key==k)
break;
q=q->next;
}
if(q!=NULL)
{
preq->next=q->next;
free(q);
n--;
return true;
}
else
return false;
} void serchHT(HashTable ha[],int p,KeyType k)
{
int i=,adr;
adr=k%p;
NodeType *q;
q=ha[adr].firstp;
while(q!=NULL)
{
i++;
if(q->key==k)
break;
q=q->next;
}
if(q!=NULL)
cout<<k%p<<","<<i;
else
cout<<"-1";
} int main()
{
int m,n,k,x;
KeyType keys[];
HashTable ha[];
cin>>m>>n;
rep(i,,n)
cin>>keys[i];
cin>>k;
creatHT(ha,x,m,m,keys,n);
serchHT(ha,m,k);
rep(i,,n)
DeleteHT(ha,x,m,m,keys[i]);
return ;
}

swust oj 1012的更多相关文章

  1. SWUST OJ 1012哈希表(链地址法处理冲突)

    哈希表(链地址法处理冲突) 1000(ms) 10000(kb) 2676 / 6911 采用除留余数法(H(key)=key %n)建立长度为n的哈希表,处理冲突用链地址法.建立链表的时候采用尾插法 ...

  2. [Swust OJ 404]--最小代价树(动态规划)

    题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535   Des ...

  3. [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)

    题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...

  4. SWUST OJ NBA Finals(0649)

    NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128   Descri ...

  5. [Swust OJ 1023]--Escape(带点其他状态的BFS)

    解题思路:http://acm.swust.edu.cn/problem/1023/ Time limit(ms): 5000 Memory limit(kb): 65535     Descript ...

  6. [Swust OJ 1125]--又见GCD(数论,素数表存贮因子)

    题目链接:http://acm.swust.edu.cn/problem/1125/ Time limit(ms): 1000 Memory limit(kb): 65535   Descriptio ...

  7. [Swust OJ 1126]--神奇的矩阵(BFS,预处理,打表)

    题目链接:http://acm.swust.edu.cn/problem/1126/ Time limit(ms): 1000 Memory limit(kb): 65535 上一周里,患有XX症的哈 ...

  8. [Swust OJ 1026]--Egg pain's hzf

      题目链接:http://acm.swust.edu.cn/problem/1026/     Time limit(ms): 3000 Memory limit(kb): 65535   hzf ...

  9. [Swust OJ 1139]--Coin-row problem

    题目链接:  http://acm.swust.edu.cn/contest/0226/problem/1139/ There is a row of n coins whose values are ...

随机推荐

  1. c#解决浏览器跨域问题

    1.浏览器为什么不能跨域? 浏览器有一个基本的安全策略--同源策略.为保证用户的信息安全,它对不同源的文档或脚本对当前文档的读写操作做了限制.域名,子域名,端口号或协议不同都属于不同源,当脚本被认为是 ...

  2. python读取uti-8格式ini配置文件出现UnicodeDecodeError: 'gbk' codec can't decode byte 0xba in position 367: illegal multibyte sequence错误解决方法

    出现这种错误只需要在read下添加encoding='utf-8' 如: from configparser import ConfigParser cf = ConfigParser() cf.re ...

  3. 关联管理器(RelatedManager)

    一.class RelatedManager "关联管理器"是在一对多或者多对多的关联上下文中使用的管理器.它存在于下面两种情况: 1.一对多 ForeignKey关系的“另一边” ...

  4. MYSQL的安全模式:sql_safe_updates介绍

    什么是安全模式 在mysql中,如果在update和delete没有加上where条件,数据将会全部修改.不只是初识mysql的开发者会遇到这个问题,工作有一定经验的工程师难免也会忘记写入where条 ...

  5. 论文阅读笔记五十一:CenterNet: Keypoint Triplets for Object Detection(CVPR2019)

    论文链接:https://arxiv.org/abs/1904.08189 github:https://github.com/Duankaiwen/CenterNet 摘要 目标检测中,基于关键点的 ...

  6. git clone pytorch或caffe2速度慢的解决办法

    caffe2官方代码,现在已经放在pytorch项目中了. 因此,源码编译pytorch或caffe2,都需要 https://github.com/pytorch/pytorch 下载代码. 由于p ...

  7. .net Core+Dapper MySQL增删改查

    新建一个用户表,以该有为例 1.Model层 public class TuiUsers { public int id { get; set; } public string userName { ...

  8. 大数据学习之HDFS基本API操作(上)06

    package it.dawn.HDFSPra; import java.io.FileNotFoundException; import java.io.IOException; import ja ...

  9. 我们为什么不用 Select * 吗?

    应用程序慢如牛,原因多多,可能是网络的原因.可能是系统架构的原因,还有可能是数据库的原因. 那么如何提高数据库SQL语句执行速度呢?有人会说性能调优是数据库管理员(DBA)的事,然而性能调优跟程序员们 ...

  10. 多版本python安装TensorFlow出现的各种事故

    TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数 ...