题目描述

定义哈希函数为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. jquery使用ajax提交form表单

    $.ajax({ type: jqform.attr('method'), // 提交方式 get/post url: jqform.attr('action'), // 需要提交的 url data ...

  2. fckeditor配置

    <!DOCTYPE html> <html > <head> <title>发布</title> <meta name="v ...

  3. Templates中的macro和include标签

    1.macro标签 1.作用:相当于在模板中声名函数 2.使用方法: 语法:{% macro 名称(参数列表) %} xxx {% endmacro %} 创建 macro.html 模板文件   - ...

  4. [LeetCode&Python] Problem 226. Invert Binary Tree

    Invert a binary tree. Example: Input: 4 / \ 2 7 / \ / \ 1 3 6 9 Output: 4 / \ 7 2 / \ / \ 9 6 3 1 Tr ...

  5. Estimating Linguistic Complexity for Science Texts--paper

    http://aclweb.org/anthology/W18-0505 https://sites.google.com/site/nadeemf0755/research/linguistic-c ...

  6. 第六课cnn和迁移学习-七月在线-cv

    ppt 参数共享终于把拿一点想清楚啦,一定要知道w是矩阵! 在传统BP中,w前后连接时是all的,辣么多w使得你给我多少图片我就能记住多少信息-->导致过拟合-->cnn当中权值共享 激励 ...

  7. Nginx + php-fpm

    www.example.com | | Nginx | | 路由到www.example.com/index.php | | 加载nginx的fast-cgi模块 | | fast-cgi监听127. ...

  8. 2018.4.2 flask web

    from flask import Flask,request from flask import jsonify from flask import render_template app = Fl ...

  9. functional program language

    1.什么是函数式编程语言 函数式语言(functional language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分是原始函数.定义函数和函数型.这种语言具有较强的组 ...

  10. 【java编程】加载Resources配置文件的方法

    一.加载配置实现k-v //FILTER_PROPERTY_NAME=META-INF/abc.properties private void loadFilterConfig(Properties ...