PTA数据结构与算法题目集(中文)  7-42整型关键字的散列映射 (25 分)

7-42 整型关键字的散列映射 (25 分)
 

给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射到长度为P的散列表中。用线性探测法解决冲突。

输入格式:

输入第一行首先给出两个正整数N(≤)和P(≥的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔。

输出格式:

在一行内输出每个整型关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。

输入样例:

4 5
24 15 61 88

输出样例:

4 0 1 3
题目分析:一道基本的散列表的题
 #define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<math.h>
#define MAXTABLESIZE 100000
typedef enum{Legitimate,Empty,Deleted}EntryType;
typedef struct HashEntry Cell;
struct HashEntry
{
EntryType Type;
int Data;
}; typedef struct HblNode* HashTable;
struct HblNode
{
int TableSize;
Cell* Cells;
}; int Hash(int Data, int TableSize)
{
return Data % TableSize;
} int NextPrime(int N)
{
int P = (N % ) ? N : N + ;
for (; P < MAXTABLESIZE; P += )
{
int i = (int)sqrt(P);
for (; i > ; i--)
if (P % i == )
break;
if (i == )
break;
}
return P;
} HashTable CreateHashTable(int N)
{
int TableSize = NextPrime(N);
HashTable H = (HashTable)malloc(sizeof(struct HblNode));
H->TableSize = TableSize;
H->Cells = (Cell*)malloc(H->TableSize * sizeof(Cell));
for (int i = ; i < H->TableSize; i++)
H->Cells[i].Type = Empty;
return H;
} int Find(int Data, HashTable H)
{
int NewPos = Hash(Data, H->TableSize);
while (H->Cells[NewPos].Type!=Empty&&H->Cells[NewPos].Data!=Data)
{
NewPos++;
if (NewPos >= H->TableSize)
NewPos -= H->TableSize;
}
return NewPos;
} void Insert(int Data, HashTable H)
{
int Pos = Find(Data, H);
if (H->Cells[Pos].Type != Legitimate)
{
H->Cells[Pos].Data = Data;
H->Cells[Pos].Type = Legitimate;
}
} int main()
{
int N, P;
scanf("%d%d", &N, &P);
HashTable H = CreateHashTable(P);
int num;
for (int i = ; i < N-; i++)
{
scanf("%d", &num);
Insert(num,H);
printf("%d ", Find(num,H));
}
scanf("%d", &num);
Insert(num, H);
printf("%d", Find(num, H));
return ;
}

PTA数据结构与算法题目集(中文) 7-42整型关键字的散列映射 (25 分)的更多相关文章

  1. PTA数据结构与算法题目集(中文) 7-32

    PTA数据结构与算法题目集(中文)  7-32 7-32 哥尼斯堡的“七桥问题” (25 分)   哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示. 可否走过这样的七 ...

  2. PTA数据结构与算法题目集(中文) 7-15

    PTA数据结构与算法题目集(中文)  7-15 7-15 QQ帐户的申请与登陆 (25 分)   实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式 ...

  3. PTA数据结构与算法题目集(中文) 7-43字符串关键字的散列映射 (25 分)

    PTA数据结构与算法题目集(中文)  7-43字符串关键字的散列映射 (25 分) 7-43 字符串关键字的散列映射 (25 分)   给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义 ...

  4. PTA数据结构与算法题目集(中文) 7-41PAT排名汇总 (25 分)

    PTA数据结构与算法题目集(中文)  7-41PAT排名汇总 (25 分) 7-41 PAT排名汇总 (25 分)   计算机程序设计能力考试(Programming Ability Test,简称P ...

  5. PTA数据结构与算法题目集(中文) 7-40奥运排行榜 (25 分)

    PTA数据结构与算法题目集(中文)  7-40奥运排行榜 (25 分) 7-40 奥运排行榜 (25 分)   每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如 ...

  6. PTA数据结构与算法题目集(中文) 7-39魔法优惠券 (25 分)

    PTA数据结构与算法题目集(中文)  7-39魔法优惠券 (25 分) 7-39 魔法优惠券 (25 分)   在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商 ...

  7. PTA数据结构与算法题目集(中文) 7-38寻找大富翁 (25 分)

    PTA数据结构与算法题目集(中文)  7-38寻找大富翁 (25 分) 7-38 寻找大富翁 (25 分)   胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假 ...

  8. PTA数据结构与算法题目集(中文) 7-37 模拟EXCEL排序 (25 分)

    PTA数据结构与算法题目集(中文)  7-37 模拟EXCEL排序 (25 分) 7-37 模拟EXCEL排序 (25 分)   Excel可以对一组纪录按任意指定列排序.现请编写程序实现类似功能. ...

  9. PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分)

    PTA数据结构与算法题目集(中文)  7-36 社交网络图中结点的“重要性”计算 (30 分) 7-36 社交网络图中结点的“重要性”计算 (30 分)   在社交网络中,个人或单位(结点)之间通过某 ...

随机推荐

  1. python学习-练习题1巩固(随机数)

    1.生成随机数 random.random()生成一个0-1之前的随机数

  2. django 从零开始 制作一个图站 1环境的配置以及测试本地服务器

    先使用用virtualenv建立一个虚拟环境 使用pycharm 建立一个django项目 选择虚拟环境和建立一个应用app 其中 tuzhan是项目根目录 user是我们的项目app 中间一些项目文 ...

  3. SpringBoot内置的各种Starter是怎样构建的?--SpringBoot源码(六)

    注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 温故而知新 本篇接 外部配置属性值是如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五) 温 ...

  4. 系统之眼!Linux系统性能监控工具Glances

    一.Glances介绍 glances是一个基于python语言开发,可以为linux或者UNIX性能提供监视和分析性能数据的功能.glances在用户的终端上显示重要的系统信息,并动态的进行更新,让 ...

  5. iviewadmin url 加入 Router base #viewDesignAdmin

    router/index.js const router = new Router({   routes,   base: '/viewDesignAdmin/',   mode: 'history' ...

  6. *fetch(_, { call, put }) { --- generator

    effects: { *fetch(_, { call, put }) { const response = yield call(queryUsers); yield put({ type: 'sa ...

  7. 一段很简单的PHP代码,用于手机拨号

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 奇思妙想-java实现另类的pipeline模式

    磕叨 在公司做项目是见到前辈们写的一端任务链的代码,大概如下 Runnable task = new TaskA(new TaskB(new TaskC(new taskD()))); task.ru ...

  9. JavaScript零宽字符

    什么是零宽字符 一种不可打印的Unicode字符, 在浏览器等环境不可见, 但是真是存在, 获取字符串长度时也会占位置, 表示某一种控制功能的字符. 常见的零宽字符有哪些 零宽空格(zero-widt ...

  10. 一道值得思考的fork()面试题

    程序如下,判断输出多少个'_' ./a.out int main(){ ; i < ; ++i){ fork(); printf("_"); } } 熟悉fork的话,这里很 ...