Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cctype>
- #include <string>
- #include <sstream>
- using namespace std;
- struct node
- {
- string key;
- string data;
- bool closed;
- node() {
- closed = false; }
- };
- class HT {
- int max_size = 100;
- node* data = new node[max_size];
- public:
- HT() { nodeGetter(); }
- int hsh(string key) {
- int value = 0;
- for (int i = 0; i < size(key); i++) {
- value += int(key[i]);
- }
- return abs(value % max_size);
- }
- void nodeGetter() {
- node* tmp = new node();
- string path = "C:/Users/Pavel/Desktop/table.txt";
- ifstream aboba(path);
- string output = "";
- string output2 = "";
- while (!aboba.eof()) {
- getline(aboba, output, '/');
- getline(aboba, output2, '/');
- tmp->key = output;
- tmp->data = output2;
- tmp->closed = true;
- if (tmp->key != "") {
- add(tmp);
- }
- output = "";
- output2 = "";
- }
- }
- void add(node* x) {
- if (hsh(x->key) != max_size - 1) {
- //if (&data[hsh(x->key)] == NULL) {
- //data[hsh(x->key)] = *x; //data[hsh(x->key)].closed = true;
- //} else
- if (data[hsh(x->key)].key == x->key)
- {
- data[hsh(x->key)] = *x; // data[hsh(x->key)].closed = true;
- }
- else
- if (!data[hsh(x->key)].closed) {
- data[hsh(x->key)] = *x; //data[hsh(x->key)].closed = true;
- }
- else {
- Coll(x, 1);
- }
- }
- else {
- rere();
- add(x);
- }
- }
- void rere() {
- max_size += 1; node* tmp = new node[max_size];
- node* data = new node[max_size];
- for (int i = 0; i < max_size-1; i++) {
- tmp[i].key = data[i].key;
- tmp[i].data = data[i].data;
- tmp[i].closed = data[i].closed;
- }
- for (int i = 0; i < max_size; i++) {
- if (tmp[i].closed) {
- cout << "ХТО Я? " << "ПРАВИЛЬНО, " << tmp->key << endl;
- add(&tmp[i]);
- }
- }
- }
- void Coll(node* x, int b) {
- if ((hsh(x->key)+b) != max_size-1) {
- //if (&data[hsh(x->key) + b] == NULL) {
- //data[hsh(x->key) + b] = *x; //data[hsh(x->key) + b].closed = true;
- //} else
- if (data[hsh(x->key) + b].key == x->key + " ")
- {
- data[hsh(x->key) + b] = *x; //data[hsh(x->key) + b].closed = true;
- }
- else if (!&data[hsh(x->key) + b].closed) {
- data[hsh(x->key) + b] = *x; // data[hsh(x->key) + b].closed = true;
- }
- else { Coll(x, b + 1); }
- }
- else {
- rere();
- add(x);
- }
- }
- void print()
- {
- for (int i = 0; i < max_size; i++) {
- if (data[i].closed){
- cout << data[i].key << " " << data[i].data << endl;
- }
- }
- }
- node* find(string key) {
- node* tmp = new node(); bool x = false;
- string buffer;
- string path = "C:/Users/Pavel/Desktop/table.txt";
- ifstream aboba(path); string output2;
- printf("\n~ Поиск ячейки...\n");
- while (!aboba.eof()) {
- getline(aboba, buffer, '/');
- getline(aboba, output2, '/');
- if (hsh(key + " ") == hsh(buffer)) {
- tmp->key = buffer;
- tmp->data = output2;
- x = true;
- break;
- }
- if (x == true) { break; }
- }
- return tmp;
- }
- void delete_method(string key) {
- node* tmp = new node();
- tmp->key = key + " ";
- tmp->closed = false;
- add(tmp);
- rere();
- }
- };
- int main()
- {
- setlocale(0, "");
- HT t = HT();
- node* test;
- t.print();
- test = t.find("001 Saratov");
- cout << test->key << " " << test->data << endl;
- //t.delete_method("001 Saratov");
- cout << endl;
- t.print();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement