

Kód: Vybrat vše
#include <stdio.h>
#include <string.h>
#include "list"
#include <stdlib.h>
class List
{
private:
struct ListItems
{
char* data;
ListItems* next;
ListItems* prev;
};
ListItems* head;
public:
List();
bool Search(char* x);
void Insert(char* x);
};
List::List()
{
head = NULL;
}
bool List::Search(char *x)
{
ListItems* p;
for (p = head; p != NULL; p = p->next)
if (p->data == x)
return true;
return false;
}
void List::Insert(char *x)
{
ListItems* p;
p = new ListItems;
p->data = x;
p->next = head;
if (head != NULL)
head->prev = p;
head = p;
p->prev = NULL;
}
/*
Ukazka, jak implementovat hashovani se separatnim retezenim
Program k clanku pro Linuxsoft
Autor: Petr Sklenicka
*/
int Hash(char* data);
void InsertHash(char* data);
bool SearchHash(char* data);
const int n = 50; // velikost tabulky
List HashTable[n]; // hashovaci tabulka
int main()
{
// ukazka ulozeni a nasledneho vyhledani zaznamu
InsertHash("some test");
bool p = SearchHash("some test");
p == true ? printf("Nalezeno\n") : printf("Nenalezeno\n");
return 0;
}
int Hash(char* data)
{
int i, hashKey;
for (int i = hashKey = 0; i < 10; i++)
hashKey = (3 * hashKey + data[i]) % n;
return hashKey;
}
void InsertHash(char* data)
{
int hashKey = Hash(data);
HashTable[hashKey].Insert(data);
}
bool SearchHash(char* data)
{
int hashKey = Hash(data);
return HashTable[hashKey].Search(data);
}