C++ 为什么我们在c++;?根据我的代码int pos=cHash(符号);

C++ 为什么我们在c++;?根据我的代码int pos=cHash(符号);,c++,data-structures,hash,hashtable,theory,C++,Data Structures,Hash,Hashtable,Theory,所以我在为我的编译器课程做一个SymbolTable程序…我遇到了一个问题,pos…为什么我们要首先使用它?TIA这里的代码实现了所谓的链式哈希表。我们维护一个链表数组,并使用函数cHash将每个符号指定给其中一个链表 以这种方式存储东西的优点是速度快。如果我们把所有的东西都放在一个单链表中,那么查找某个东西的平均成本是O(n),其中n是列表中的项目数,因为平均而言,我们必须查看列表中至少一半的项目。但是,通过拥有多个链表(比如b个链表)并或多或少地随机分布项目,我们可以将查找的平均成本降低到O

所以我在为我的编译器课程做一个SymbolTable程序…我遇到了一个问题,
pos
…为什么我们要首先使用它?TIA这里的代码实现了所谓的链式哈希表。我们维护一个链表数组,并使用函数cHash将每个符号指定给其中一个链表


以这种方式存储东西的优点是速度快。如果我们把所有的东西都放在一个单链表中,那么查找某个东西的平均成本是O(n),其中n是列表中的项目数,因为平均而言,我们必须查看列表中至少一半的项目。但是,通过拥有多个链表(比如b个链表)并或多或少地随机分布项目,我们可以将查找的平均成本降低到O(1+n/b),如果b的数量级与n的数量级大致相同,则查找速度会快得多。

如果链中没有元素,则在前面添加新元素, 否则,通过散列,如果我们到达一个包含元素的链或桶,那么我们在链的开头插入新元素,然后
其余元素链接到新节点的末尾。

pos
是数组中的位置……实际上,您不必在此处使用
pos
,因为您可以存储并使用指向
块[cHash(symbol)]
的指针或引用。您需要询问授课人员。我们不能说为什么在一个随机函数中使用一个变量,而没有关于发生了什么的信息。我投票关闭,因为没有足够的上下文来回答。我们不知道什么是
block
。假设它是一个数组,那么当然需要有某种方法来知道要更新哪个元素,因此
[pos]
。通过分解成一个函数,将
块[pos]
传递到一个
神秘块类型&
,从而只索引一次,当然可以减少这种重复。但不清楚你的问题是“为什么要索引”还是“我可以少索引”。谢谢大家,我理解了这个问题
void insert(char *symbol, char *type)
{
    int pos = cHash(symbol);

    if (block[pos] == NULL)
    {
        block[pos] = new SymbolInfo();
        block[pos]->symbol = symbol;
        block[pos]->type = type;
        block[pos]->next = NULL;
    }
    else
    {
        SymbolInfo *newNode = new SymbolInfo();
        newNode->symbol = symbol;
        newNode->type = type;

        // pointer swap
        SymbolInfo *nextNode = block[pos];
        block[pos] = newNode;
        newNode->next = nextNode;
    }
}