#include <iostream>#include <string.h>#include <stdlib.h>#include <stdio.h>using namespace std;struct Torg { char seller[30];//продавец};Torg *mas[20000]; //массив указателей на структуруint HF(char* b) //ХЕШ-ФУНКЦИЯ = формула Rhash(c)i = hash(c)i + ai + bi^2{ int c = 0; for(int i = 0; i < strlen(b); i++) { c += b[i]; } return c % 256;}Torg* search(char* seller)//поиск{ int c = HF(seller); // результат хеш функции int a = 0, b = 0; //разрешение коолиизии while ((mas[a+b+c]!=NULL)&&(strcmp(mas[c+a+b]->seller, seller)!=0)&&(c+a+b<20000)) { // пока не нашли нужный элемент двигаемся оп хеш талице a++; b = a*a; } if ((a+b+c<20000)&&(mas[a+b+c])) return mas[a+b+c];//если нашли возвращаем return NULL;}void add(Torg *d)//добавление{ int c = HF(d->seller); unsigned long int a = 0, b = 0; //разрешение коолиизии while ((mas[c+a+b]!=NULL)&&(c+a+b<20000)) {//пока не нашли свободное место и не вышли за размер массива двигаемся по хеш таблице a++; b = a*a; } if (a+b+c < 20000) mas[a+b+c] = d; // если нашли добавляем в эту позицию}int main(){ memset(mas, sizeof(mas), 0); char a; FILE *f = fopen("dic1.txt","r"); for(int i=0;i<20000;i++) { Torg* t; t = new Torg; fscanf(f,"%s",t->seller); cout<<t->seller<<endl<<i; add(t); } return 1;}
C++ (Qt)strict CTorgPtr { CTorgPtr * mNext; Torg * mData;};