Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.18 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <fstream>
  4. #include <memory>
  5. using namespace std;
  6. struct Node
  7. {
  8. int hash;
  9. int key;
  10. int value;
  11. Node* next;
  12.  
  13. Node(int hash, int key, int value)
  14. {
  15. next = NULL;
  16. this->hash = hash;
  17. this->key = key;
  18. this->value = value;
  19. }
  20. };
  21.  
  22. struct HashSet
  23. {
  24. unsigned int MOD;
  25. vector<Node*> table;
  26.  
  27. HashSet()
  28. {
  29. MOD = 96557;
  30. table.resize(MOD);
  31. }
  32.  
  33. int hash(int x)
  34. {
  35. x = x ^ (x >> 16);
  36. return x;
  37. }
  38.  
  39. Node* get(int key)
  40. {
  41. Node* node = table[hash(key) % MOD];
  42. while (node != NULL)
  43. {
  44. if (node->key == key)
  45. {
  46. return node;
  47. }
  48. node = node->next;
  49. }
  50. return NULL;
  51. }
  52.  
  53. bool exists(int key)
  54. {
  55. return (get(key) != NULL);
  56. }
  57.  
  58.  
  59. void add(int key)
  60. {
  61. if (exists(key))
  62. {
  63. return;
  64. }
  65. int h = hash(key);
  66. Node* node = new Node(h, key, key);
  67. node->next = table[h % MOD];
  68. table[h % MOD] = node;
  69. }
  70.  
  71. void remove(int key)
  72. {
  73. int h = hash(key);
  74. Node* node = table[h % MOD];
  75. Node* prev_node = NULL;
  76. while (node != NULL)
  77. {
  78. if (node->key == key)
  79. {
  80. if (prev_node == NULL)
  81. {
  82. table[h % MOD] = node->next;
  83. }
  84. else
  85. {
  86. prev_node->next = node->next;
  87. node->next = NULL;
  88. }
  89. return;
  90. }
  91. prev_node = node;
  92. node = node->next;
  93. }
  94. }
  95. };
  96.  
  97.  
  98. int main()
  99. {
  100. HashSet set;
  101. while (!cin.eof())
  102. {
  103. string op;
  104. int key;
  105. cin >> op >> key;
  106. if (op == "insert")
  107. {
  108. set.add(key);
  109. }
  110. if (op == "delete")
  111. {
  112. set.remove(key);
  113. }
  114. if (op == "exists")
  115. {
  116. cout << (set.exists(key) ? "true" : "false") << endl;
  117. }
  118. }
  119. return 0;
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement