第四步:拿它去做词频统计
哈希表最常用的事之一。补全 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 编
补写哈希表的删除
场景:~/work/hash/erase.cpp 是链地址法哈希表,put / get 都写好了,erase 还是空的。 任务:补全 erase:从那一格的链上摘掉节点并 delete。make 之后用 sample.txt 自测;chec
最上面那个节点叫什么
第 1 步:六个节点,一层层往下挂 第 2 步:最上面这个:没有上级 第 3 步:最下面这三个:什么都没挂 第 4 步:2 连同它下面挂的全部 第 5 步:这一小块本身也是一棵树 1 2 3 4 5 6 一棵树最上面、没有任何上级的那个节点
什么都没挂的叫什么
下面不再挂任何东西的节点,叫【0】。
直接挂在下面的叫什么
直接挂在某个节点下面的那些节点,叫它的【0】。