一个头结点数组,散列后的元素插入数组元素后的链表中。
#ifndef listAddress_H_
#define listAddress_H_
#include <iostream>
using namespace std;
struct node
{
int data;
node* next;
};
class hashTable
{
private:
int size;
node*table;
public:
hashTable();
~hashTable();
void insert(int elem);
void deletex(int elem);
bool search(int elem);
void print();
};
hashTable::hashTable()
{
cout<<"please input the size of hashTable.\n";
cin>>size;
table= new node[size];
for(int i=0; i<size; i++)
{
table[i].data=i;
table[i].next=NULL;
}
}
hashTable::~hashTable()
{
delete []table;
}
void hashTable::insert(int elem)
{
int index=elem%size;
node*cur=&table[index];
while(cur->next)
{
cur=cur->next;
}
cur->next=new node;
cur->next->data=elem;
cur->next->next=NULL;
}
bool hashTable::search(int elem)
{
int index=elem%size;
node*cur=&table[index];
while(cur->next)
{
if(cur->next->data==elem)
return 1;//1 representative founded.
else
cur=cur->next;
}
return 0;
}
void hashTable::deletex(int elem)
{
if(!search(elem))
{
cout<<"the elem you want to delete is not exist.\n";
return;
}
int index=elem%size;
node*cur=&table[index];
while(cur->next)
{
if(cur->next->data==elem)
{
cur->next=cur->next->next;
delete cur->next;
cur->next=NULL;
return;
}
cur=cur->next;
}
}
void hashTable::print()
{
for(int i=0; i<size; i++)
{
node *p=&table[i];
while(p->next)
{
cout<<i<<" "<<p->next->data<<endl;
p=p->next;
}
}
}
#endif
测试:
#include <iostream>
#include "listAddress.h"
using namespace std;
int main()
{
//test input : 7
hashTable test;
test.insert(21);
test.insert(35);
test.insert(100);
test.insert(3);
test.insert(78);
test.insert(99);
test.insert(20);
test.insert(10);
// test.deletex(10);
//test.insert(10);
test.deletex(100);
test.deletex(100);
test.print();
return 0;
}