网站设计图,wordpress首页分类标题,如今做那些网站能致富,网页怎么弄到桌面快捷方式8.10 Design and implement a hash table which uses chaining (linked lists) to handle collisions. 这道题让我们实现一个简单的哈希表#xff0c;我们采用了最简单的那种取余映射的方式来实现#xff0c;我们使用Cell来保存一对对的key和value的映射关系#xff0c;然后… 8.10 Design and implement a hash table which uses chaining (linked lists) to handle collisions. 这道题让我们实现一个简单的哈希表我们采用了最简单的那种取余映射的方式来实现我们使用Cell来保存一对对的key和value的映射关系然后每一个格子都用一个list链表来保存所有的余数为该格子序号的Cell我们设定格子总数为10然后我们用泛式编程来适用于所有的参数类型然后实现哈希表的基本存数和取数的功能。现在大多数的哈希表都是用二叉搜索树来实现的但是用BST的话取数就是不是O(1)的时间复杂度了(如果我们以后很多的collision的话)但是BST的好处就是省空间不需要建立超大的数组来保存映射。 templatetypename K, typename V
class Cell{
public:Cell(K k, V v): _key(k), _value(v) {}bool equivalent(Cell *c) {return equivalent(c-getKey());}bool equivalent(K k) {return _key k;}K getKey() { return _key; }V getValue() { return _value; }private:K _key;V _value;
};templatetypename K, typename V
class Hash {
public:Hash() {_items.resize(_MAX_SIZE);}int hashCodeOfKey(K key) {return sizeof(key).size() % _items.size();}void put(K key, V value) {int x hashCodeOfKey(key);if (_items[x] nullptr) {_items[x] new listCellK, V* ();}listCellK, V* *collided _items[x];for (auto a : *collided) {if (a-equivalent(key)) {collided-remove(a);break;}}CellK, V *cell new CellK, V(key, value);collided-push_back(cell);}V get(K key) {V v;int x hashCodeOfKey(key);if (_items[x] nullptr) {return v;}listCellK, V* *collided _items[x];for (auto a : *collided) {if (a-equivalent(key)) {return a-getValue();}}return v;}private:const int _MAX_SIZE 10;vectorlistCellK, V** _items;
};