哈希--直接定值法和除留取余法
生活随笔
收集整理的這篇文章主要介紹了
哈希--直接定值法和除留取余法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. 哈希是一種算法,哈希表是用哈希算法構(gòu)造出來的一種數(shù)據(jù)結(jié)構(gòu)
2. 哈希算方法的幾種方法
代碼:hashtable.h
HashTable.cpp
- 直接定值法
- 除留取余法
代碼:hashtable.h
#include<iostream>
using namespace std;
#include<vector>//作為一個標(biāo)記位
enum State
{EMPTY,EXIT,DEL
};//哈希節(jié)點
template<class K,class V>
struct HashNode
{pair<K, V> _kv;State _state;HashNode():_state(EMPTY){}
};template<class K,class V>
ostream& operator<<(ostream &out, HashNode<K,V> node)
{out << " "<< " " << node._state;return out;
}template<class K,class V>
class HashTable
{//friend ostream& operator<<(ostream &out, HashNode<K, V> node);
public:HashTable():_n(0){_table.resize(10); //預(yù)留的數(shù)租空間大小是}//插入函數(shù)bool Insert(const pair<K,V> node){Capacity();int m = HanshFunc(node); //HanshFunc,找到我需要插入的一個下標(biāo)size_t index = m;size_t i = 0;while (_table[index]._state == EXIT){index = m;i++;index = m + i*i;while (index >= _table.capacity()){index = index - _table.capacity();}}_table[index]._kv = node;_table[index]._state = EXIT;_n++;return true;}int Search(const pair<K, V> node){size_t m = HanshFunc(node);size_t index = m;size_t i = 0;while (_table[index]._kv.first != node.first){if (_table[index]._state == EMPTY){return -1;}index = m;i++;index = m + i*i;while (index >= _table.capacity()){index = index - _table.capacity();}}return index;}private:void Capacity(){//if (_n / _table.capacity() >= 0.7) //這類需要改進(jìn)的一個地方 就是,我們不能使用0.7,因為除以了之后,不是一個小數(shù)//{// printf("增容\n");//}if (_n * 10 / _table.capacity() >= 7){printf("增容\n");}}int HanshFunc(const pair<K, V> node){size_t index = node.first % _table.capacity();return index;}private:vector<HashNode<K,V>> _table; //這個是數(shù)組size_t _n; //當(dāng)前放置的數(shù)據(jù)的個數(shù)是多少
};HashTable.cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include"hashtable.h"int main()
{HashTable<int, int> a;pair<int, int> p(5,6);pair<int, int> p1(15,7);pair<int, int> p2(25, 6);pair<int, int> p3(85, 6);pair<int, int> p4(75, 6);pair<int, int> p5(95, 6);pair<int, int> p6(2, 6);pair<int, int> p7(4, 6);a.Insert(p);a.Insert(p1);a.Insert(p2);a.Insert(p3);a.Insert(p4);a.Insert(p5);a.Insert(p6);a.Insert(p7);cout << a.Search(p);return 0;
}總結(jié)
以上是生活随笔為你收集整理的哈希--直接定值法和除留取余法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《突击》百度云
- 下一篇: HTTP项目1.0 -- HTTP协议基