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

感觉查找的方法不难理解,但是要注意很多小细节,不然可能会出错,比如在第七章作业的编程题中,一开始提交发现在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<N; 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<MSize; 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的值是固定的。
在学习的过程,我认为多和别人讨论是一个很好的学习方法。在关于这道题的谈论后,感觉自己对于散列表和二次探测法都有了更深的理解。
在顺序查找中,设置哨兵让我印象很深刻,这是非常巧妙的一个方法。因此,我也能感悟到,在学习过程中,我们不能只局限于写出代码,在写出代码后,我们更要想办法对代码进行优化。

浙公网安备 33010602011771号