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

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

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

输入格式:

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

输出格式:

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

输入样例:

  1. 4 5
  2. 24 15 61 88

输出样例:

  1. 4 0 1 3
    题目分析:一道基本的散列表的题
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<malloc.h>
  5. #include<math.h>
  6. #define MAXTABLESIZE 100000
  7. typedef enum{Legitimate,Empty,Deleted}EntryType;
  8. typedef struct HashEntry Cell;
  9. struct HashEntry
  10. {
  11. EntryType Type;
  12. int Data;
  13. };
  14.  
  15. typedef struct HblNode* HashTable;
  16. struct HblNode
  17. {
  18. int TableSize;
  19. Cell* Cells;
  20. };
  21.  
  22. int Hash(int Data, int TableSize)
  23. {
  24. return Data % TableSize;
  25. }
  26.  
  27. int NextPrime(int N)
  28. {
  29. int P = (N % ) ? N : N + ;
  30. for (; P < MAXTABLESIZE; P += )
  31. {
  32. int i = (int)sqrt(P);
  33. for (; i > ; i--)
  34. if (P % i == )
  35. break;
  36. if (i == )
  37. break;
  38. }
  39. return P;
  40. }
  41.  
  42. HashTable CreateHashTable(int N)
  43. {
  44. int TableSize = NextPrime(N);
  45. HashTable H = (HashTable)malloc(sizeof(struct HblNode));
  46. H->TableSize = TableSize;
  47. H->Cells = (Cell*)malloc(H->TableSize * sizeof(Cell));
  48. for (int i = ; i < H->TableSize; i++)
  49. H->Cells[i].Type = Empty;
  50. return H;
  51. }
  52.  
  53. int Find(int Data, HashTable H)
  54. {
  55. int NewPos = Hash(Data, H->TableSize);
  56. while (H->Cells[NewPos].Type!=Empty&&H->Cells[NewPos].Data!=Data)
  57. {
  58. NewPos++;
  59. if (NewPos >= H->TableSize)
  60. NewPos -= H->TableSize;
  61. }
  62. return NewPos;
  63. }
  64.  
  65. void Insert(int Data, HashTable H)
  66. {
  67. int Pos = Find(Data, H);
  68. if (H->Cells[Pos].Type != Legitimate)
  69. {
  70. H->Cells[Pos].Data = Data;
  71. H->Cells[Pos].Type = Legitimate;
  72. }
  73. }
  74.  
  75. int main()
  76. {
  77. int N, P;
  78. scanf("%d%d", &N, &P);
  79. HashTable H = CreateHashTable(P);
  80. int num;
  81. for (int i = ; i < N-; i++)
  82. {
  83. scanf("%d", &num);
  84. Insert(num,H);
  85. printf("%d ", Find(num,H));
  86. }
  87. scanf("%d", &num);
  88. Insert(num, H);
  89. printf("%d", Find(num, H));
  90. return ;
  91. }

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. Mysql(Mariadb)慢查询日志中long_query_time 与log_queries_not_using_indexes与min_examined_row_limit 关系分析

    慢查询日志中long_query_time 与log_queries_not_using_indexes与min_examined_row_limit 关系分析   参数介绍: long_query_ ...

  2. 简单配置Vue路由

    简单配置Vue路由 1.  创建一个单文件组件Test.vue <template> <div>Test</div> </template> <s ...

  3. scrapy的扩展件extensions

    extensions.py文件 # -*- coding: utf-8 -*- # 该扩展会在以下事件时记录一条日志: # spider被打开 # spider被关闭 # 爬取了特定数量的条目(ite ...

  4. 5W2H方法:七问分析法

    5W2H分析方法也叫七问分析法,是二战中美国陆军兵器修理部首创.简单.方便.易于理解.使用,富有启发意义,被广泛应用于企业管理和技术活动,对于决策和执行性的措施也非常有帮助,有助于弥补考虑问题的疏漏. ...

  5. WEB应用之http协议和httpd闲聊

    什么是web?在日常生活中我们常常听到web这个词,它到底是什么呢?今天我们来聊一聊web应用http协议:相信生活在如今互联网时代的我们,http这个协议应该对我们不是很陌生吧!比如双十一双十二我们 ...

  6. 机器学习——详解经典聚类算法Kmeans

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第12篇文章,我们一起来看下Kmeans聚类算法. 在上一篇文章当中我们讨论了KNN算法,KNN算法非常形象,通过距离公 ...

  7. vue cli3 的 eslint 修改为4个空格

    只需要修改如下两个文件

  8. void指针和数组指针之间的转换

    由于void* 可以被任何指针赋值,所以以void*作为函数参数可以使得接口更容易接受不同类型的参数,不过需要注意的时,实际操作时还需要利用强制类型转换,将指针转换为原类型,否则在内存上会有问题. 一 ...

  9. 使用JDBC工具类模拟登陆验证-Java(新手)

    模拟登陆验证: package JdbcDome; import java.sql.Connection; import java.sql.PreparedStatement; import java ...

  10. F-NAScan:一款网络资产扫描工具

    此脚本的大概流程为: ICMP存活探测-->端口开放探测-->端口指纹服务识别-->提取快照(若为WEB)-->生成结果报表 用法 python NAScan.py -h 10 ...