题目描述

定义哈希函数为H(key) = key%11。输入表长(大于、等于11),输入关键字集合,用线性探测再散列构建哈希表,并查找给定关键字。

--程序要求--

若使用C++只能include一个头文件iostream;若使用C语言只能include一个头文件stdio

程序中若include多过一个头文件,不看代码,作0分处理

不允许使用第三方对象或函数实现本题的要求

输入

测试次数t

每组测试数据为:

哈希表长m、关键字个数n

n个关键字

查找次数k

k个待查关键字

输出

对每组测试数据,输出以下信息:

构造的哈希表信息,数组中没有关键字的位置输出NULL

对k个待查关键字,分别输出:0或1(0—不成功,1—成功)、比较次数、查找成功的位置(从1开始)

样例输入

1
12 10
22 19 21 8 9 30 33 4 15 14
4
22
56
30
17

样例输出

22 30 33 14 4 15 NULL NULL 19 8 21 9
1 1 1
0 6
1 6 2
0 1
 
#include<iostream>
#include<string>
#include<queue>
using namespace std;
const int MaxLen = ;
class Map {
private:
bool vist[MaxLen];
int matrix[MaxLen][MaxLen];
int vexnum;
void BFS(int v);
public:
void setmatrix(int vnum, int mx[MaxLen][MaxLen]);
void BFSTraverse();
};
void Map::setmatrix(int vnum, int mx[MaxLen][MaxLen]){
int i, j;
vexnum = vnum;
for (i = ; i < MaxLen; i++)
for (j = ; j < MaxLen; j++)
matrix[i][j] = ;
for (i = ; i < vexnum; i++)
for (j = ; j < vexnum; j++)
matrix[i][j] = mx[i][j];
}
void Map::BFSTraverse(){
BFS();
}
void Map::BFS(int v){
int w, u;
int i, k;
int *adjvex = new int[vexnum];
queue<int> Q;
for (i = ; i < vexnum; i++)
vist[i] = false;
for (v = ; v < vexnum; ++v)
{
if (!vist[v])
{
vist[v] = true;
cout << v << " ";
Q.push(v);
while (!Q.empty())
{
u = Q.front();
Q.pop();
k = ;
for (i = ; i < vexnum; i++)
{
if (matrix[u][i] == )
adjvex[k++] = i;
}
i = ;
for (w = adjvex[i]; w >= ; w = adjvex[i++])
if (!vist[w])
{
vist[w] = true;
cout << w << " ";
Q.push(w);
}
}
}
}
}
int main(){
int t,key=;
cin >> t;
while(t--)
{
int m, n;
cin >> m >> n;
int *a = new int[m];
int *flag = new int[m];//用来标记这个位置有没有值
int i;
for (i = ; i < m; i++)
flag[i] = -;
for (i = ; i < n; i++)
{
int yu,x;
cin >> x;
yu = x % key;
if (flag[yu] == -)
{
a[yu] = x;
flag[yu] = ;
}
else
{
while ()
{
if (flag[yu] == -)//找到一个空位置
{
a[yu] = x;
flag[yu] = ;
break;
}
yu++;
yu = yu % m;
}
}
}
for (i = ; i < m - ; i++)
{
if (flag[i] == -)
cout << "NULL" << " ";
else
cout << a[i] << " ";
}
if (flag[i] == -)
cout << "NULL" << endl;
else
cout << a[i] << endl;
int k;
cin >> k;
while (k--)
{
int x,count = , loc;
cin >> x;
int yu = x % ;
int find = ;
while (true)
{
if (flag[yu] == -)
{
count++;
break;
}
if (a[yu] == x)
{
count++;
loc = yu;
find = ;
break;
}
count++;
yu++;
yu = yu % m;
}
if (find)
cout << find << " " << count << " " << loc+ << endl;
else
cout << find << " " << count << endl;
}
}
}
 
 

DS哈希查找--线性探测再散列的更多相关文章

  1. 哈希表---线性探测再散列(hash)

    //哈希表---线性探测再散列 #include <iostream> #include <string> #include <stdio.h> #include ...

  2. 线性探测再散列 建立HASH表

    根据数据元素的关键字和哈希函数建立哈希表并初始化哈希表,用开放定址法处理冲突,按屏幕输出的功能表选择所需的功能实现用哈希表对数据元素的插入,显示,查找,删除. 初始化哈希表时把elem[MAXSIZE ...

  3. 哈希查找解决地址冲突的两种最常见方法(线性探测再散列,链地址法)C++实现

    #include<iostream>#include<iomanip>using namespace std; typedef struct Node{ int data; s ...

  4. Python与数据结构[4] -> 散列表[2] -> 开放定址法与再散列的 Python 实现

     开放定址散列法和再散列 目录 开放定址法 再散列 代码实现 1 开放定址散列法 前面利用分离链接法解决了散列表插入冲突的问题,而除了分离链接法外,还可以使用开放定址法来解决散列表的冲突问题. 开放定 ...

  5. JDK8;HashMap:再散列解决hash冲突 ,源码分析和分析思路

    JDK8中的HashMap相对JDK7中的HashMap做了些优化. 接下来先通过官方的英文注释探究新HashMap的散列怎么实现 先不给源码,因为直接看源码肯定会晕,那么我们先从简单的概念先讲起   ...

  6. 【hash】什么是hash,什么是哈希,什么是hash散列,什么是hash一致性算法【关于hash的详解】

    什么是hash,什么是哈希,什么是hash散列,什么是hash一致性算法

  7. java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区

    java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测).链地址法.再哈希.建立公共溢出区 标签: hashmaphashmap冲突解决冲突的方法冲突 2016-0 ...

  8. Hash冲突的线性探测开放地址法

    在实际应用中,无论如何构造哈希函数,冲突是无法完全避免的. 开放地址法 这个方法的基本思想是:当发生地址冲突时,按照某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止.这个过程可用下式描述:  ...

  9. Hash(散列函数)简单应用引出解决散列冲突的四种方法

    商店允许顾客通过电话订购商品,并在几天后上门自取.商店的数据库使用客户的电话号码作为其检索的关键字(客户知道自己的电话号码,而且这些电话关键字几乎是唯一的).如何组织商店的数据库,以允许更加高效的进行 ...

随机推荐

  1. leetcode227. Basic CalculatorII

    这道题是只有四则运算但是没有括号的,因此可以利用stack来存储的,并且每次使得存储的值与符号有对应的关系,最后在栈中只剩下可以利用加法进行处理的数的,注意在i=n-1的时候到达最后的部分也是需要把数 ...

  2. C语言--第三周作业评分和总结(5班)

    作业链接:https://edu.cnblogs.com/campus/hljkj/CS2017-5/homework/1073 一.评分要求 要求1 完成PTA第三周所有题(20分). 要求2 4道 ...

  3. odoo软件名称及授权协议的变化

    先看一张表格 起步时叫TinyERP,微小的ERP:发展中期叫做OpenERP,开放的ERP:历经10年积累的软件,客户群,开发支持用户群,开始构筑自己的商业模式.到8版本,改名为Odoo.同时,软件 ...

  4. 如何将备份的oracle数据库还原到指定用户下。

    上一文章 oracle11g数据库--创建表空间,创建用户,用户授权并指定表空间.我们已经建好了指定的新用户pdmis. 接下来我们需要将备份好的数据库,还原至新用户pdmis下. 想要还原,我们需要 ...

  5. hdu2461 Rectangles 线段树--扫描线

    You are developing a software for painting rectangles on the screen. The software supports drawing s ...

  6. redux笔记 进阶

    1 拆分UI组件和容器组件 import React from 'react' const AppUI = (props) =>{ return ( <div className=&quo ...

  7. Lucene&Solr(索引) 暂空

    1.案例分析:什么是全文检索,如何实现全文检索 2.Lucene实现全文检索的流程 a)         创建索引 b)         查询索引 3.配置开发环境 4.创建索引库 5.查询索引库 6 ...

  8. elasticsearch技术解析与实战(一) 入门和索引

    GET _cat/nodes GET _cat/health GET _cat/shards GET http://10.37.84.124:9200/secisland?pretty { " ...

  9. 用flask和长轮询实现对帅哥投票和实时查看票数

    flask中的代码 from flask import Flask,request,render_template,redirect,session,jsonify import uuid impor ...

  10. deno学习三 官方提供的方便deno 安装方式

    早起deno 使用了golang 开发,同时需要protobuf 进行数据的序列化以及反序列化处理 当前的deno 已经使用rust 进行了开发,同时官方提供的安装方式也很方便了,不需要 那么复杂的编 ...