我想在继续之前提一下,我已经查看了这个网站以及其他网站上询问同样问题的其他问题。我希望能得到一个好的答案,因为我的目标有两个:
- 首先,我想学习如何创建哈希表。
- 其次,我发现Stack Overflow上的很多答案往往假设某种程度的知识,而这种知识对于新手来说常常是不存在的。话虽如此,我希望在自己弄清楚之后,编辑我的主要信息,包括更深入的过程解释。
进入正题:
据我目前的理解,哈希表是一个数组列表(或类似的数据结构),它希望尽可能地减少冲突,以保持其受人称赞的O(1)复杂度。以下是我的当前过程:
因此,我的第一步是创建一个指针数组:
Elem ** table;
table = new Elem*[size];//size is the desired size of the array
我的第二步是创建一个哈希函数(非常简单的函数)。
int hashed = 0;
hashed = ( atoi( name.c_str() ) + id ) % size;
//name is a std string, and id is a large integer. Size is the size of the array.
我的第三步是创建一个用于检测碰撞的东西,这是我目前所处的部分。
以下是一些伪代码:
while( table[hashedValue] != empty )
hashedValue++
else
put in the list at that index.
虽然有点不太雅致,但我仍处于“这是什么”的阶段。请包容我的困惑。
还有其他需要补充的吗?我有遗漏或者做错了什么吗?
谢谢。