Доброго времени суток.
Есть готова реализация Хеш-таблицы с поиком, добавлением и удалением элементов.
Вопрос в том, как воспользоваться функцией поиска и отразить результат поиска ?
Я пробовал делать что-то вроде
int Key = 50;
Node *dataItem;
dataItem = findNode(Key);
if (dataItem != NULL)
cout<< "Found";
else
cout<< "No found";
Поиск выполняется по значению - есть в таблице, выводим.
Сам код:
#include <iostream.h>
#include <fstream>
#define compEQ(a,b) (a == b)
typedef int T;
typedef int hashTableIndex;
typedef struct Node_
{
T data;
struct Node_ *next;
} Node;
Node **hashTable;
int hashTableSize;
hashTableIndex myhash(T data);
Node *insertNode(T data);
void deleteNode(T data);
Node *findNode (T data);
hashTableIndex myhash(T data)
{
return (data % hashTableSize);
}
Node *insertNode(T data)
{
Node *p, *p0; hashTableIndex bucket;
bucket = myhash(data);
if ((p = new Node) == 0)
{
cout<<"no mem"<<endl;
exit(1);
}
p0 = hashTable[bucket];
hashTable[bucket] = p;
p->next = p0;
p->data = data;
return p;
}
void deleteNode(T data)
{
Node *p0, *p;
hashTableIndex bucket;
p0 = 0;
bucket = myhash(data);
p = hashTable[bucket];
while (p && !compEQ(p->data, data))
{
p0 = p; p = p->next;
}
if (!p) return;
if (p0) p0->next = p->next;
else hashTable[bucket] = p->next;
free (p);
}
Node *findNode (T data)
{
Node *p;
p = hashTable[myhash(data)];
while (p && !compEQ(p->data, data))
p = p->next;
return p;
}
int main()
{
int i, *a, maxnum;
cout <<" maxnum : ";
cin >> maxnum;
cout <<"HashTableSize: ";
cin >> hashTableSize;
a = new int[maxnum];
hashTable = new Node*[hashTableSize];
for (i = 0; i < hashTableSize; i++)
hashTable[i] = NULL;
for (i = 0; i < maxnum; i++)
a[i] = rand() % 100;
for (i = 0; i < maxnum; i++)
insertNode(a[i]);
for (i = maxnum-1; i >= 0; i--)
findNode(a[i]);
ofstream out("List.txt");
for (i = 0; i < maxnum; i++)
{
cout << endl <<a[i] << endl;
out << a[i];
if ( i < maxnum - 1 )
{
out << "\t";
cout << "\t";
}
}
out.close();
out.open("HashTable.txt");
for (i = 0; i < hashTableSize; i++)
{
out << i << " : ";
Node *Temp = hashTable[i];
while ( Temp )
{
out << Temp->data << " -> ";
cout << Temp->data << " -> ";
Temp = Temp->next;
}
out << endl;
}
out.close();
for (i = maxnum-1; i >= 0; i--)
deleteNode(a[i]);
return 0;
}
for (i = maxnum-1; i >= 0; i--)
findNode(a[i]);
Как мне отобразить, если я нашёл что-то ?
Сравнивать буду например с числом, вводимым с клавиатуры.
Заранее спасибо за дельные мысли.