【发布时间】:2014-06-11 03:22:53
【问题描述】:
我正在阅读 Robert Sedwick 关于 C++ 算法的书中关于散列的内容
我们可能会使用标头节点来简化插入代码 进入有序列表,但我们可能不想使用 M 头节点 单独链接中的单独列表。事实上,我们甚至可以消除 M 通过列表中的第一个节点链接到列表 组成表格
.
class ST
{
struct node
{
Item item;
node* next;
node(Item x, node* t)
{ item = x; next = t; }
};
typedef node *link;
private:
link* heads;
int N, M;
Item searchR(link t, Key v)
{
if (t == 0) return nullItem;
if (t->item.key() == v) return t->item;
return searchR(t->next, v);
}
public:
ST(int maxN)
{
N = 0; M = maxN/5;
heads = new link[M];
for (int i = 0; i < M; i++) heads[i] = 0;
}
Item search(Key v)
{ return searchR(heads[hash(v, M)], v); }
void insert(Item item)
{ int i = hash(item.key(), M);
heads[i] = new node(item, heads[i]); N++; }
};
我对上述文字的两个问题是什么作者的意思
“我们甚至可以通过让列表中的第一个节点组成表来消除指向列表的 M 个链接。”我们如何修改上面的代码?
“我们可能不想将 M 头节点用于单独链接中的单个列表。”这句话是什么意思。
【问题讨论】: