C++简单哈希表

来源:互联网 发布:手机触摸屏测试软件 编辑:程序博客网 时间:2024/06/05 03:12

简单的哈希表。。一个数组。。装着每一个链表的首地址。

需要Node**mList

mList=new Node*[size]//这里没初始化

for(int i=0;i<size;i++) mList[i]=nullptr;

还有一个生成key的函数return (n^0xdeadbeef ) %size

下面是完整马 

HPP

#include <iostream>using namespace std;template<typename T>struct Hash_List{int data;Hash_List*pNext;Hash_List(int n){this->data = n;this->pNext = nullptr;}};template <typename T>class Hash_Table{public:Hash_Table();~Hash_Table();int Hash_Func(int n);void Hash_Insert(int n);int Hash_Find(int n);private:int Size;Hash_List<T>** hsTable;};template<typename T> Hash_Table<T>::Hash_Table(){Size = 5555555;hsTable = new Hash_List<T>*[Size];for (int i = 0; i < Size; i++)hsTable[i] = nullptr;}template<typename T>Hash_Table<T>::~Hash_Table(){for (int i = 0; i < Size; i++){Hash_List<T>*p = hsTable[i];while (p != nullptr){Hash_List<T>*d = p;p = p->pNext;delete d;d = nullptr;}}}template<typename T>int Hash_Table<T>::Hash_Func(int n){return (n ^ 0xdeadbeef) % Size;}template<typename T>int Hash_Table<T>::Hash_Find(int n){int key = Hash_Func(n);for(Hash_List<T>*pHead = hsTable[key];pHead!=nullptr;pHead=pHead->pNext){if (pHead->data == n){cout << "Find\n";return 1;}}cout << "No\n";return 0;}template<typename T>void Hash_Table<T>::Hash_Insert(int n){int key=Hash_Func(n);for (Hash_List<T>*p = hsTable[key]; p != nullptr; p = p->pNext){if (p->data==n){return;}}Hash_List<T>*pNew = new Hash_List<T>(n);if (pNew==nullptr){return;}pNew->pNext = hsTable[key];hsTable[key] = pNew;}



CPP

#include "h.hpp"int main(){Hash_Table<int>t;t.Hash_Insert(36);t.Hash_Insert(362);t.Hash_Insert(33246);t.Hash_Insert(465);t.Hash_Insert(316);t.Hash_Insert(6213);t.Hash_Insert(65);int g=t.Hash_Find(362);}
嗯。。测了下。。能跑。

0 0
原创粉丝点击