#include <iostream>
#include <cstdlib>
using namespace std;
template<typename DataType>class HashTable
{
public:
HashTable(int size){
maxSize = size;
int count = 0;
elements = new DataType[size];
if (elements == NULL)
exit(1);
for (int i =0; i < size; i++)
elements[i] = NULL;
}
~HashTable(){
delete [] elements;
}
int hash(DataType value);
int searchHash(DataType value);
DataType getData(int i){
if (i <=0 ){
std::cout << "index error!, i must > 0" << endl;
}
return elements[i];
}
bool insertHash(DataType value);
private:
int maxSize;
int count;
DataType *elements;
};
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 -2;
else{
// elelemts[rp] = value;
return rp;
}
}
template<typename DataType> int HashTable<DataType>::hash(DataType value){
return value % 13;
}
template<typename DataType> bool HashTable<DataType>::insertHash(DataType value){
int pos = searchHash(value);
if (pos < 0){
return false;
}
else if (elements[pos] == value){
cout << "duplicate element!" << endl;
return false;
}
else{
elements[pos] = value;
return true;
}
}
int main(){
HashTable<int> hashtable = HashTable<int>(13);
int array[] = {66,32,98,478,11,23,43,55,67,108,230,223,10};
for (int i=0; i < sizeof(array)/sizeof(int); i++){
hashtable.insertHash( array[i] );
}
cout << "elements in table:";
for (int i=1; i<=13; i++)
cout << hashtable.getData(i) << " ";
cout << endl;
cout << "55 position:" << hashtable.searchHash(55) << endl;
return 0;
}
转载于:https://my.oschina.net/innovation/blog/812770