第七章学习小结

第七章我们学习了查找,基本框架如下

第七章学习小结_第1张图片

 

 感觉查找的方法不难理解,但是要注意很多小细节,不然可能会出错,比如在第七章作业的编程题中,一开始提交发现在DEV上运行成功但是在PTA上编译错误,PTA上提示是因为hash[]数组定义模糊(在代码中我使用hash数组来存储关键字,且定义为全局变量),后来问了同学,自己也查找了下资料,是和原本就有的库重名了。把hash数组放进主函数里面后,只通过中间两个测试点,后来和同学讨论了一下,发现在插入hash的时候某些细节没注意,才导致剩下两个测试点没有通过。

insert函数如下所示:

void insert(int a[], int hash[], int MSize)
{
    
    int i, j, t=0; 
    
    for(i=0; i)
    {
        if(i)    cout<<" ";
        int key = a[i]%MSize; 
        t=key;
        if(hash[key]==0)    
        {
            hash[key]=a[i];
            cout << key;
        }
        else
        {
            for(j=1; j)
            {
                key = (key+j*j)%MSize;
                if(hash[key]==0)
                {
                    hash[key]=a[i];
                    break;
                }
                key=t;//①
            }
            if(j==MSize&&hash[key]!=a[i])    cout<< '-';
            else    cout << key;
        }
        
                
    }
}

在原本代码中,①处原本没有写,这里导致了在第二个for循环中,key会不断被覆盖,但其实key = (key+j*j)%MSize中,括号的key的值是固定的。

在学习的过程,我认为多和别人讨论是一个很好的学习方法。在关于这道题的谈论后,感觉自己对于散列表和二次探测法都有了更深的理解。

在顺序查找中,设置哨兵让我印象很深刻,这是非常巧妙的一个方法。因此,我也能感悟到,在学习过程中,我们不能只局限于写出代码,在写出代码后,我们更要想办法对代码进行优化。

你可能感兴趣的:(第七章学习小结)