Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <conio.h>
- #include <string>
- #include <vector>
- #include <fstream>
- using namespace std;
- struct Elem
- {
- string value;
- Elem * next;
- };
- struct track
- {
- string dotA, dotB,route;
- };
- int sum;
- int SizeOfTable = 11; // Размер хэш таблицы
- Elem **hash_table;
- int HashOfString(string str);
- Elem* Add(string val);
- void Delete(string val);
- void Find_(string val);
- int main()
- {
- string dotA_, dotB_;
- setlocale(LC_ALL, "RUSSIAN");
- string data; // Вспомогательная переменная для файл->вектор
- ifstream file("track1.txt");
- int choice;
- int NumbOfElems;// Количество считываемых с файла переменных
- cout << "Количество считываемых элементов ";
- cin >> NumbOfElems;
- vector<track> elements(NumbOfElems);
- hash_table = new Elem*[SizeOfTable];
- for (int i = 0; i < SizeOfTable; i++)
- {
- hash_table[i] = NULL;
- }
- for (int i = 0; i < elements.size(); i++)
- {
- file >> elements[i].dotA;
- file >> elements[i].dotB;
- file >> elements[i].route;
- }
- cout << "Исходная таблица данных: " << endl;
- for (int i = 0; i < elements.size(); i++)
- {
- cout << elements[i].dotA << " " << elements[i].dotB << " " << elements[i].route << endl;
- }
- for (int i = 0; i < elements.size(); i++) {
- Add(elements[i].route);
- }
- while (true)
- {
- cout << "1. Добавление элемента\n2. Поиск элемента\n 3. Удаление элемента\n 4. Вывод хэш-таблицы";
- cin >> choice;
- if (choice == 1)
- {
- system("cls");
- cout << "Введите новый элемент ";
- cin >> data;
- Add(data);
- }
- if (choice == 4)
- {
- int exit = 0;
- //int j = -1;
- system("cls");
- for (int i = 0; i < SizeOfTable; i++) {
- cout << "Индекс " << i << "| Элемент: ";
- Elem *tmp = hash_table[i];
- if (hash_table[i] == 00000000) cout << "Элементов нет";
- while (tmp) {
- cout << tmp->value << ","; ;
- tmp = tmp->next;
- }
- cout << endl;
- }
- }
- if (choice == 2)
- {
- system("cls");
- cout << "Искомый элемент: ";
- cin >> data;
- Find_(data);
- }
- if (choice == 3)
- {
- system("cls");
- cout << "Введите удаляемый элемент";
- cin >> data;
- Delete(data);
- }
- }
- _getche();
- return 0;
- }
- /*------------------------------------------*/
- int HashOfString(string str) // Вычисление хэш-функции для строки
- {
- sum = 0;
- for (int i = 0; i < str.size(); i++)
- sum = sum + (int(str[i]));
- return sum%SizeOfTable;
- }
- Elem* Add(string val)
- {
- Elem * temp1, *temp2;
- int NewElemHash;
- NewElemHash = HashOfString(val);
- if ((temp1 = new Elem) == NULL)
- {
- exit;
- }
- temp2 = hash_table[NewElemHash];
- hash_table[NewElemHash] = temp1;
- temp1->next = temp2;
- temp1->value = val;
- return temp1;
- }
- void Delete(string val)
- {
- Elem *temp1, *temp2;
- int delete_elem;
- temp1 = NULL;
- delete_elem = HashOfString(val);
- temp2 = hash_table[delete_elem];
- while (temp2 && temp2->value != val) {
- temp1 = temp2;
- temp2 = temp2->next;
- }
- if (!temp2) return;
- if (temp1)
- temp1->next = temp2->next;
- else
- hash_table[delete_elem] = temp2->next;
- free(temp2);
- }
- void Find_(string val)
- {
- Elem *tmp;
- tmp = hash_table[HashOfString(val)];
- while (tmp != NULL) {
- if (val == tmp->value) {
- cout << "Искомый элемент имеет индекс " << HashOfString(val) << endl; return;
- }
- tmp = tmp->next;
- }
- cout << "Элемент не найден\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement