Advertisement
Guest User

Untitled

a guest
Jan 18th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.67 KB | None | 0 0
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <string>
  4. #include <vector>
  5. #include <fstream>
  6. using namespace std;
  7. struct Elem
  8. {
  9. string value;
  10. Elem * next;
  11. };
  12. struct track
  13. {
  14. string dotA, dotB,route;
  15. };
  16.  
  17.  
  18. int sum;
  19. int SizeOfTable = 11; // Размер хэш таблицы
  20. Elem **hash_table;
  21. int HashOfString(string str);
  22. Elem* Add(string val);
  23. void Delete(string val);
  24. void Find_(string val);
  25.  
  26.  
  27. int main()
  28. {
  29. string dotA_, dotB_;
  30. setlocale(LC_ALL, "RUSSIAN");
  31. string data; // Вспомогательная переменная для файл->вектор
  32. ifstream file("track1.txt");
  33. int choice;
  34. int NumbOfElems;// Количество считываемых с файла переменных
  35. cout << "Количество считываемых элементов ";
  36. cin >> NumbOfElems;
  37. vector<track> elements(NumbOfElems);
  38. hash_table = new Elem*[SizeOfTable];
  39.  
  40. for (int i = 0; i < SizeOfTable; i++)
  41. {
  42. hash_table[i] = NULL;
  43. }
  44.  
  45. for (int i = 0; i < elements.size(); i++)
  46. {
  47. file >> elements[i].dotA;
  48. file >> elements[i].dotB;
  49. file >> elements[i].route;
  50.  
  51. }
  52. cout << "Исходная таблица данных: " << endl;
  53. for (int i = 0; i < elements.size(); i++)
  54. {
  55. cout << elements[i].dotA << " " << elements[i].dotB << " " << elements[i].route << endl;
  56. }
  57. for (int i = 0; i < elements.size(); i++) {
  58. Add(elements[i].route);
  59. }
  60.  
  61. while (true)
  62. {
  63. cout << "1. Добавление элемента\n2. Поиск элемента\n 3. Удаление элемента\n 4. Вывод хэш-таблицы";
  64. cin >> choice;
  65. if (choice == 1)
  66. {
  67. system("cls");
  68. cout << "Введите новый элемент ";
  69. cin >> data;
  70. Add(data);
  71.  
  72. }
  73. if (choice == 4)
  74. {
  75. int exit = 0;
  76. //int j = -1;
  77. system("cls");
  78. for (int i = 0; i < SizeOfTable; i++) {
  79.  
  80. cout << "Индекс " << i << "| Элемент: ";
  81. Elem *tmp = hash_table[i];
  82. if (hash_table[i] == 00000000) cout << "Элементов нет";
  83. while (tmp) {
  84.  
  85. cout << tmp->value << ","; ;
  86. tmp = tmp->next;
  87. }
  88. cout << endl;
  89. }
  90.  
  91. }
  92. if (choice == 2)
  93. {
  94. system("cls");
  95. cout << "Искомый элемент: ";
  96. cin >> data;
  97. Find_(data);
  98. }
  99.  
  100. if (choice == 3)
  101. {
  102. system("cls");
  103. cout << "Введите удаляемый элемент";
  104. cin >> data;
  105. Delete(data);
  106. }
  107.  
  108.  
  109. }
  110. _getche();
  111. return 0;
  112.  
  113. }
  114. /*------------------------------------------*/
  115. int HashOfString(string str) // Вычисление хэш-функции для строки
  116. {
  117. sum = 0;
  118. for (int i = 0; i < str.size(); i++)
  119. sum = sum + (int(str[i]));
  120. return sum%SizeOfTable;
  121. }
  122. Elem* Add(string val)
  123. {
  124. Elem * temp1, *temp2;
  125. int NewElemHash;
  126. NewElemHash = HashOfString(val);
  127. if ((temp1 = new Elem) == NULL)
  128. {
  129.  
  130. exit;
  131. }
  132. temp2 = hash_table[NewElemHash];
  133. hash_table[NewElemHash] = temp1;
  134. temp1->next = temp2;
  135. temp1->value = val;
  136. return temp1;
  137.  
  138. }
  139. void Delete(string val)
  140. {
  141. Elem *temp1, *temp2;
  142. int delete_elem;
  143. temp1 = NULL;
  144. delete_elem = HashOfString(val);
  145. temp2 = hash_table[delete_elem];
  146. while (temp2 && temp2->value != val) {
  147. temp1 = temp2;
  148. temp2 = temp2->next;
  149. }
  150. if (!temp2) return;
  151. if (temp1)
  152. temp1->next = temp2->next;
  153. else
  154. hash_table[delete_elem] = temp2->next;
  155. free(temp2);
  156. }
  157. void Find_(string val)
  158. {
  159. Elem *tmp;
  160. tmp = hash_table[HashOfString(val)];
  161. while (tmp != NULL) {
  162. if (val == tmp->value) {
  163. cout << "Искомый элемент имеет индекс " << HashOfString(val) << endl; return;
  164. }
  165. tmp = tmp->next;
  166. }
  167. cout << "Элемент не найден\n";
  168.  
  169.  
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement