【发布时间】:2020-10-03 16:02:23
【问题描述】:
这是我写的关于哈希表的小代码。
#include <iostream>
using namespace std;
int hashval(int n){
return n%5;
}
int main(){
int hashtable[4],num, value;
for (int i=0 ; i<=4; i++){
hashtable[i]=0;
}
for (int i=0; i <=4; i++){
cout << "Enter the number you wanna enter : ";
cin>> num;
value=hashval(num);
while (hashtable[value]!=0){
value=(value+1)%5;
}
hashtable[value]=num;
}
**// line A //** cout << hashtable[0] << " " << hashtable[1] << " " << hashtable[2] << " " <<hashtable[3]<< " " << hashtable[4] << " " <<endl;
for (int j=0; j<=4; j=j+1){
**// line B //** cout << hashtable[j] << " ";
}
}
当我输入五个数字“13,15,18,29,30”时,A 行显示输出“15 29 30 13 18”。但是,B 行不显示最后一个元素,即显示的输出是“15 29 30 13 4”。 4从哪里来的?我很困惑为什么总是不打印最后一个元素,无论输入什么元素,而是打印一个不存在的元素。 A线和B线的功能不一样吗?我的代码有什么问题?任何帮助将不胜感激。谢谢!
【问题讨论】:
-
你的数组太小了。
-
@BessieTheCow 你是什么意思?哪里太小了?
-
@Anon hashtable[4] 存储四 (4) 个值。您尝试在其中存储五个数字。
-
@Anon123 该数组只存储了 4 个值,因为数组的索引是 0、1、2 和 3。
-
@Anon123
int array[N]是一个大小为 N 的数组,数组的第一个索引是 0。因此最大的有效索引是N-1。非常多的新手知道前两个语句,但没有意识到它们暗示了第三个语句。