LINUX.ORG.RU

Избранные сообщения jeston

Использовать готовый код

Форум — Development

Доброго времени суток.
Есть готова реализация Хеш-таблицы с поиком, добавлением и удалением элементов.
Вопрос в том, как воспользоваться функцией поиска и отразить результат поиска ?
Я пробовал делать что-то вроде

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]);

Как мне отобразить, если я нашёл что-то ?
Сравнивать буду например с числом, вводимым с клавиатуры.
Заранее спасибо за дельные мысли.

 

jeston
()