五个人占了几个格子

运行下面这段程序(链地址法,8 格): #include <iostream> #include <string> #include <utility> #include <vector> u

开始练习 →

第一步:格子、定位和插入

最终作品第一步:在 HashMap 里写好构造函数(开 cap 个空格子)、slot(取余定位)和 put(追加到那一格)。放完五个人之后输出第 7 格里有几个。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

第二步:接上按键查

给它加上 get:找到返回名字,找不到返回 没这个人。查 23 号(它和 15 号挤在同一格),输出结果。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

第三步:接上删除别误伤邻居

加上 del。删掉 15 号之后,把两件事一起输出:15 号查出来是什么、23 号查出来是什么,中间用 / 隔开。只删掉该删的那条才对得上,把整格清空或者一条没删都会露馅。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

第四步:拿它去做词频统计

哈希表最常用的事之一。补全 top_word:统计词频,返回出现最多的那个词。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

交付:哈希表加两个应用

这是这条路线的最终作品。把完整的 HashMap 写出来(格子 + slot + put / get / del,用链地址法处理冲突),再写词频统计,然后一次验完五条:放完 5 个人,第 7 格里有 2 条;get(23) 是「北辰」;ge

开始练习 →

负数取模在 C++ 里得几

在 C++ 里,-3 % 8 的结果是【0】。

开始练习 →

修好插入时丢掉的旧元素

场景:实验机上 ~/work/hash/chain.cpp 是一张链地址法哈希表(每格挂一条单链表),按指令 put / get。可同一格里放进第二个键以后,第一个就查不到了,内存检查还报泄漏。 任务:修好 put 里插入新节点的那一步,让

开始练习 →

修好负数键的下标

场景:~/work/hash/neg.cpp 的键可以是负数。键是正数时一切正常,一遇到负数键,内存检查就报数组越界。 任务:修好槽位的算法,让负数键也落在 0..cap-1 里。make 编译后用 sample.txt 自测(里面有负数键

开始练习 →

修好 rehash 时漏搬的元素

场景:~/work/hash/grow.cpp 装得太满时会扩容(rehash)。扩容之前插进去的键,扩容之后有一部分查不到了,内存检查还报泄漏。 任务:修好 rehash:每一格的整条链都要搬到新表,而且要按新容量重新算位置。make 编

开始练习 →