散列表
template <typename DataType>
class HashTable{
private:
int maxSize;
int count;
DataType *elements;
public:
HashTable(int size)
{
count = 0;
elements = new DataType[size];
maxSize = size;
if(elements == NULL)
return false;
for(int i = 0;i<size ;i++)
{
elements[i] = NULL;
}
}
~HashTable()
{
delete[] elements;
}
int hash(DataType value,int p);
int searchHash(DataType value);
DataType getData(int i)
{
if(i<= 0)
{
std::cout<<"error"<<endl;
exit(1);
}return elements[i-1];
}
bool insertHash(DataType value);
};
template <typename DataType>
int HashTable<DataType>::hash(DataType value,int p =13)
{
return value % p;
}
template <typename DataType>
int HashTable<DataType>::searchHash(DataType value)
{
int p = hash(value);
if(elements[p] == value)
{
return p;
}
int rp = (p+1)%maxSize;
while(rp != p)
{
if(elements[rp] == value)
return rp;
if(elements[rp] == NULL)
break;
rp = (rp+1)%maxSize;
}
if(rp == p)
{
return -1;
}
else
{
elements[rp] = value;
return rp;
}
}
template <typename DataType>
bool HashTable<DataType>::insertHash(DataType value)
{
int pos = searchHash(value);
if(pos < 0)
return false;
else if(elements[pos] == value)
{
cout<<"重复元素"<<endl;
return false;
}
else
{
elements[pos] = value;
return true;
}
}