如图提问,请回答以下问题真的搞不明白呀?

img

img


平方探测法处理哈希冲突,为什么存储地址不是8啊?填空题的哈希查找也有点搞不明白。不好意思我的基础真的太弱了,翻书也不知道找哪个方面的资料。

@ada;
一下回答一下

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/357485
  • 你也可以参考下这篇文章:编写一个程序,自定义以为数组,删除一维数组中所有相同的数,使之只剩一个。数组中的数按由小到大顺序排列,并显示运行所用时间。
  • 除此之外, 这篇博客: 设计一个算法,通过一趟遍历在单链表中确定所有节点数据的平均值。要求给出节点定义,然后写出算法。中的 1.设计一个算法,通过一趟遍历在单链表中确定所有节点数据的平均值。要求给出节点定义,然后写出算法。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • typedef struct LNode{
    int data;
    struct LNode *next;
    }*LinkList;

    double GetAverage(LinkList &L)
    {
    double sum=0;
    double average;
    int num = 0;
    LinkList p = L;
    while(p!=NULL)
    {
    sum += p->data;
    num++;
    p = p->next;
    }
    average = sum * 1.0 / num;
    return average;
    }

  • 您还可以看一下 张传波老师的软件设计是怎样炼成的?课程中的 架构设计的第一层拆解小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答:

    对于哈希表中的平方探测法的处理哈希冲突,每次发生哈希冲突时,不是一直增加固定的值,而是用一个增量序列来计算下一个探测位置。增量序列通常使用二次探测,具体计算公式为:$h_i = (h_i-1 + di)\mod m$,其中$h_i$表示每次探测的哈希表位置,$di$表示增量,$m$表示哈希表大小。可以看到,每一个探测位置都是由前一个探测位置加上一个增量计算而来的,因此不是一直增加固定的值。

    在使用哈希查找的填空题中提到的一些概念,可以参考以下资料:

    • 数据结构--哈希表--哈希查找-菜鸟教程
    • 哈希表-百度百科

    建议多去查阅一些数据结构与算法的相关资料,例如极客时间的数据结构与算法专栏、《算法(第四版)》等。

    附:统计字符串中字母、数字、空格和其他字符的个数的代码实现(C语言):

    #include<stdio.h>
    
    void TongJi(char s[])
    {
        int ZiMu = 0, KongGe = 0, ShuZi = 0, QiTa = 0, i;
        for (i = 0; s[i] != '\0'; i++)
        {
            if (s[i] == 32) KongGe++;
            else if ((s[i] >= 48) && (s[i] <= 57)) ShuZi++;
            else if (((s[i] >= 97) && (s[i] <= 122)) || ((s[i] >= 65) && (s[i] <= 90))) ZiMu++;
            else QiTa++;
        }
        printf("空格:%d;数字:%d;字母:%d;其他:%d。\n", KongGe, ShuZi, ZiMu, QiTa);
    }
    
    int main()
    {
        char s[100];
        printf("请输入字符串:");
        gets_s(s);
        TongJi(s);
        return 0;
    }