#include <cstdlib>
#include <cstdio>
#include <iostream>
const int B = 65;
typedef char * elementtype;
struct celltype
{
elementtype element;
celltype * next;
};
typedef celltype * position;
class dictionary
{
protected:
position D[B];//tablica nagłówków list
public:
dictionary();
~dictionary();
void Makenul();
bool Member(elementtype x);
void Insert(elementtype x);
void Delete(elementtype x);
int H(elementtype x);
void print( );
};
dictionary::dictionary()
{
for (int i = 0; i<B; i++)
D[i] = NULL;
}
dictionary::~dictionary()
{
position p;
for (int i = 0; i<B; i++)
{
while (D[i] != NULL)
{
p = D[i];
D[i] = D[i]->next;
delete p;
}
}
}
void dictionary::Makenul()
{
position p;
for (int i = 0; i<B; i++)
{
while (D[i] != NULL)
{
p = D[i];
D[i] = D[i]->next;
delete p;
}
}
}
bool dictionary::Member(elementtype x)
{
position current;
current = D[H(x)];
while (current != NULL)
{
if (current->element == x) return true;
else current = current->next;
}
return false;
}
void dictionary::Insert(elementtype x)
{
int bucket;
position oldheader;
if (!Member(x))
{
bucket = H(x);
oldheader = D[bucket];
D[bucket] = new celltype;
D[bucket]->element = x;
D[bucket]->next = oldheader;
}
}
void dictionary::Delete(elementtype x)
{
position p, aktualny;
int bucket;
bucket = H(x);
if (D[bucket] != NULL)
{
if (D[bucket]->element == x)/*jesli x w pierwszej komorce*/
{
p = D[bucket];
D[bucket] = D[bucket]->next;
delete p;
}
else /*jesli x nie wystepuje w pierwszej komorce*/
{
aktualny = D[bucket];
while (aktualny->next != NULL)
if ((aktualny->next->element) == x)
{
p = aktualny->next;
aktualny->next = aktualny->next->next;
delete p;
break; /*wyjscie z petli po usunieciu*/
}
else aktualny = aktualny->next;
}
}
}
int dictionary::H(elementtype x)
{
return (int(x[0])) % B;
}
void dictionary::print( ){
for (int i = 0; i < B; i++)
{
elementtype a = (elementtype)(D[i]);
std::cout << "D[" << i << "] = ";
if (D[i] != NULL) std::cout <<D[i];
else std::cout << "-";
std::cout << std::endl;
}
}
int main(){
/*dane wejsciowe*/
char *a = "a";
char *b = "b";
char *c = "c";
char *d = "d";
char *e = "e";
char *f = "f";
char *g = "g";
char *h = "h";
char *x = "x";
char *elementconienalezy = "o";
char *aa = "r";
dictionary *dic = new dictionary();
//std::cout << "Sprawdzam czy cos jest w slowniku: " ;
std::cout << "Wrzucam do slownika: a,b,c,d,e,f,g,h,x" << std::endl;
dic->Insert(a);
dic->Insert(b);
dic->Insert(c);
dic->Insert(d);
dic->Insert(e);
dic->Insert(f);
dic->Insert(g);
dic->Insert(h);
dic->Insert(x);
dic->Insert(aa);
// std::cout << "Sprawdzam jak wyglada... :\\n ";
//dic->print();
std::cout << "Sprawdzam czy a nalezy do slownika... 1 - nalezy | 0 nie nalezy :\\n ";
std::cout << dic->Member(a)<<std::endl;
std::cout << "Sprawdzam czy aa nalezy do slownika... 1 - nalezy | 0 nie nalezy :\\n ";
std::cout << dic->Member(aa) << std::endl;
std::cout << "Usuwam a ze slownika \\n ";
dic->Delete(a);
std::cout << "Sprawdzam czy a nalezy do slownika... 1 - nalezy | 0 nie nalezy :\\n ";
std::cout << dic->Member(a) << std::endl;
std::cout << "Sprawdzam czy aa nalezy do slownika... 1 - nalezy | 0 nie nalezy :\\n ";
std::cout << dic->Member(aa) << std::endl;
std::cout << "Sprawdzam czy elementconienalezy nie nalezy do slownika... 1 - nalezy | 0 nie nalezy :\\n ";
std::cout << dic->Member(elementconienalezy);
getchar();
}