您的位置:首页 > 其它

哈希表分离链接发解决冲突

2015-06-09 19:47 381 查看
<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;
	}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: