Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <list>
  5.  
  6. using namespace std;
  7.  
  8. class HashTable {
  9. vector<list<int>> table;
  10.  
  11. int hash_f(int value) {
  12. value *= value;
  13. value >>= 11;
  14. return value % 1024;
  15. }
  16.  
  17. public:
  18. HashTable() {
  19. table.resize(100000);
  20. }
  21.  
  22. void add(int item) {
  23. int h = hash_f(item);
  24. table[h].push_front(item);
  25. }
  26.  
  27. int find(int item) {
  28. int cur;
  29. list<int>::iterator p_begin;
  30. int h = hash_f(item);
  31. p_begin = table[h].begin();
  32. while (p_begin != table[h].end()) {
  33. cur = *p_begin;
  34. if (cur == item) {
  35. return 1;
  36. }
  37. advance(p_begin, 1);
  38. }
  39. return 0;
  40.  
  41. }
  42.  
  43. void del(int item) {
  44. int h = hash_f(item);
  45. table[h].remove(item);
  46. }
  47. };
  48.  
  49. class Set {
  50. HashTable t;
  51. public:
  52. void ad(int item) {
  53. if (!t.find(item)) {
  54. t.add(item);
  55. }
  56. }
  57.  
  58. int exists(int item) {
  59. return t.find(item);
  60. }
  61.  
  62. void dell(int item) {
  63. t.del(item);
  64. }
  65.  
  66. };
  67.  
  68.  
  69. int main() {
  70. int k;
  71. string s1;
  72. Set s;
  73. freopen("set.in", "r", stdin);
  74. freopen("set.out", "w", stdout);
  75. while (cin >> s1) {
  76. if (s1 == "insert") {
  77. cin >> k;
  78. s.ad(k);
  79. } else if (s1 == "exists") {
  80. cin >> k;
  81. if (s.exists(k)) {
  82. cout << "true\n";
  83. } else {
  84. cout << "false\n";
  85. }
  86. } else if (s1 == "delete") {
  87. cin >> k;
  88. s.dell(k);
  89. }
  90. }
  91.  
  92.  
  93. return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement