雜湊表在插入和查詢擁有好高的效率,當資料足夠的多時,相比於平衡樹,效率幾乎是平衡樹的兩倍。
開雜湊雜湊具有的優勢就是,雜湊表中存放著鍊錶的位址,每個進來的資料通過雜湊函式求得位置,存放在相應位置的鍊錶中。查詢資料時,只需要查詢該資料通過雜湊函式求得的位置下的鍊錶中是否存在,就能高效的完成查詢;插入時,只需要對該資料通過雜湊函式求得位置的鍊錶進行頭插就可以。
#include
#include
#include
using
namespace
std;
template
struct hashnode
hashnode* _next;
valuetype _value;
};template
struct _kofk
};template
struct _kofkv
};template
struct _hashfun
};template
class __hashfun>
class hashtable;
template
class __hashfun>
struct hashtableiterator
ptr operator->()
ref operator*()
self& operator++()
self operator++(int)
self& operator--()
self operator--(int)
bool
operator!= (const self& it)
bool
operator== (const self& it)
hashtable* _ht;
node* _ptr;
private:
void increase()
else
}_ptr = null;}}
void decrease()
_ptr = tmp;
}else
else
_ptr = tmp;}}
}};template
class __hashfun = _hashfun >
class hashtable
hashtable(const hashtable& h)
:_size(0)}}
hashtable& operator=(hashtable h)
~hashtable()
_table[index] = null;}}
pairbool> insert(const valuetype& v)
bool erase(iterator& it)
bool erase(valuetype& v)
while (del != null)
pre = del;
del = del->_next;
}return
false;
}iterator find(const valuetype& v)
tmp = tmp->_next;
}return iterator(tmp, this);
}void checkloadfactory()
}void reallocate()}}
_table.swap(newtable);
}size_t getnextprime(size_t pre)
;for (size_t index = 0; index<_primesize index>
return _primelist[_primesize - 1];
}size_t hashfun(const valuetype& v, size_t size)
iterator begin()
}return iterator(null, this);
}iterator end()
private:
vector
_table;
size_t _size;
};int main()
cout
<< endl;
hashtable >::iterator it4 = h4.begin();
cout
<< *it4++ << endl;
it4 = h4.begin();
cout
<< *++it4 << endl;
it4++;
cout
<< *it4 << endl;
it4++;
cout
<< *it4 << endl;
it4++;
cout
<< *it4 << endl;
it4++;
cout
<< *it4 << endl;
cout
<< *--it4 << endl;
hashtable, _kofkv > h2;
h2.insert(pair(1, 1));
h2.insert(pair(2, 1));
h2.insert(pair(3, 1));
h2.insert(pair(4, 1));
h2.insert(pair(5, 1));
h2.insert(pair(6, 1));
h2.insert(pair(7, 1));
h2.insert(pair(8, 1));
h2.insert(pair(9, 1));
h2.insert(pair(10, 1));
hashtable, _kofkv>::iterator it2 = h2.begin();
it2->second = 20;
hashtable, _kofkv > h3(h2);
return
0;}
資料結構 雜湊演算法
最近開始學習王爭老師的 資料結構與演算法之美 通過總結再加上自己的思考的形式記錄這門課程,文章主要作為學習歷程的記錄。雜湊演算法的定義是將任意長度的二進位制值串對映為固定長度的二進位制值串。這個對映規則就是雜湊演算法。通過原始資料對映後得到的二進位制值串就是雜湊值。設計乙個優秀的雜湊演算法應滿足幾點...
資料結構 雜湊
裝填因子 key的個數與表長的比值。雜湊表查詢成功的平均查詢長度,查詢失敗的平均查詢長度都是期望,期望怎麼求,平均查詢長度就怎麼求。雜湊表這裡有兩種實現方式 線性開型定址雜湊,鍊錶雜湊。1.線性開型定址雜湊 陣列實現,資料個數不大於表長,放乙個元素時,若發生衝突,則順次線性掃瞄直到找到乙個空位。2....
資料結構 雜湊
關鍵 不比較關鍵碼,直接搜尋得到需要的數。特點 與搜尋樹不一樣,雜湊結構元素的儲存位置與關鍵碼直接對應,可以不用進行比較遍歷。如圖,建立乙個陣列,把a 4 中的資料按特定的規則儲存到相應的位置,比如a i n,到時候搜尋資料的時候可以按照同樣的規律直接找到這個位置,如果這個位置有數,則存在。比如按照...