<pre name="code" class="cpp">#include<iostream>
#include<cstdlib>
using namespace std;
class HashTable
{
private:
struct Node
{
int data;
Node* pnext;
Node(int data_) :data(data_), pnext(0){}
Node() :pnext(0){}
};
Node** TheLists;
int TableSize;
public:
HashTable(int size);
int Hash(int);
void Insert(int);
Node* Find(int);
void Print()const;
};
int main()
{
HashTable t(10);
for (int i = 0; i < 100; i++)
{
t.Insert(i);
}
t.Print();
system("pause");
return 0;
}
HashTable::HashTable(int size)
{
TableSize = size;
TheLists = new Node*[TableSize]; //创建TableSize个表
for (int i = 0; i < size; i++)
{
TheLists[i] = new Node; //给每一个表创建表头
}
}
int HashTable::Hash(int Key) //哈希函数 哈希函数自己选择
{
return Key % TableSize;
}
void HashTable::Insert(int data)
{
Node* p = Find(data);
if (p == NULL)
{
Node* NewNode = new Node(data);
int pos = Hash(data);
Node* l = TheLists[pos];
NewNode->pnext = l->pnext;
l->pnext = NewNode;
}
}
HashTable::Node* HashTable::Find(int data)
{
int pos = Hash(data);
Node* l = TheLists[pos];
Node* p = l->pnext;
while (p != NULL && p->data != data)
{
p = p->pnext;
}
return p;
}
void HashTable::Print()const //显示目前哈希表中的所有元素
{
for (int i = 0; i < TableSize; i++)
{
cout << "TheLists" << i << endl;
Node* l = TheLists[i]->pnext;
while (l)
{
cout << l->data << " ";
l = l->pnext;
}
cout << endl;
}
}
哈希表分离链接发解决冲突
最新推荐文章于 2022-11-17 10:16:22 发布