当前位置:   article > 正文

数据结构哈希表

数据结构哈希表

这里个大家用数组来模拟哈希表

法一:拉链法

法二:开放寻址法

  1. /*
  2. * Project: 11_哈希表
  3. * File Created:Sunday, January 17th 2021, 2:11:23 pm
  4. * Author: Bug-Free
  5. * Problem:AcWing 840. 模拟散列表 拉链法
  6. */
  7. #include <cstring>
  8. #include <iostream>
  9. using namespace std;
  10. const int N = 1e5 + 3; // 取大于1e5的第一个质数,取质数冲突的概率最小 可以百度
  11. //* 开一个槽 h
  12. int h[N], e[N], ne[N], idx; //邻接表
  13. void insert(int x) {
  14. // c++中如果是负数 那他取模也是负的 所以 加N 再 %N 就一定是一个正数
  15. int k = (x % N + N) % N;
  16. e[idx] = x;
  17. ne[idx] = h[k];
  18. h[k] = idx++;
  19. }
  20. bool find(int x) {
  21. //用上面同样的 Hash函数 讲x映射到 从 0-1e5 之间的数
  22. int k = (x % N + N) % N;
  23. for (int i = h[k]; i != -1; i = ne[i]) {
  24. if (e[i] == x) {
  25. return true;
  26. }
  27. }
  28. return false;
  29. }
  30. int n;
  31. int main() {
  32. cin >> n;
  33. memset(h, -1, sizeof h); //将槽先清空 空指针一般用 -1 来表示
  34. while (n--) {
  35. string op;
  36. int x;
  37. cin >> op >> x;
  38. if (op == "I") {
  39. insert(x);
  40. } else {
  41. if (find(x)) {
  42. puts("Yes");
  43. } else {
  44. puts("No");
  45. }
  46. }
  47. }
  48. return 0;
  49. }

  1. /*
  2. * Project: 11_哈希表
  3. * File Created:Sunday, January 17th 2021, 4:39:01 pm
  4. * Author: Bug-Free
  5. * Problem:AcWing 840. 模拟散列表 开放寻址法
  6. */
  7. #include <cstring>
  8. #include <iostream>
  9. using namespace std;
  10. //开放寻址法一般开 数据范围的 2~3倍, 这样大概率就没有冲突了
  11. const int N = 2e5 + 3; //大于数据范围的第一个质数
  12. const int null = 0x3f3f3f3f; //规定空指针为 null 0x3f3f3f3f
  13. int h[N];
  14. int find(int x) {
  15. int t = (x % N + N) % N;
  16. while (h[t] != null && h[t] != x) {
  17. t++;
  18. if (t == N) {
  19. t = 0;
  20. }
  21. }
  22. return t; //如果这个位置是空的, 则返回的是他应该存储的位置
  23. }
  24. int n;
  25. int main() {
  26. cin >> n;
  27. memset(h, 0x3f, sizeof h); //规定空指针为 0x3f3f3f3f
  28. while (n--) {
  29. string op;
  30. int x;
  31. cin >> op >> x;
  32. if (op == "I") {
  33. h[find(x)] = x;
  34. } else {
  35. if (h[find(x)] == null) {
  36. puts("No");
  37. } else {
  38. puts("Yes");
  39. }
  40. }
  41. }
  42. return 0;
  43. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/117645
推荐阅读
相关标签
  

闽ICP备14008679号