```c++ void createhash(hashtable ht[], int n) { int temp; for (int i = 0; i < n; i++) { cin >> temp; int index = temp % m; if (index < 0) index = (index % m + m) % m; // 确保索引非负 while (ht[index].key != nullkey) { // 线性探测处理冲突 index = (index + 1) % m; } ht[index].key = temp; } } int searchhash(hashtable ht[], int key) { int index = key % m; if (index < 0) index = (index % m + m) % m; // 确保索引非负 int start = index; do { if (ht[index].key == key) return index; index = (index + 1) % m; } while (index != start && ht[index].key != nullkey); return -1; } ``` 额外需要注意的地方: 1. 创建哈希表时,确保输入值的哈希计算结果为非负数,使用 `(index % m + m) % m` 来调整可能的负索引。 2. 在线性探测过程中,循环检测直到找到空位或回到起始位置,防止无限循环。 3. 查找函数中,当索引变为负数时同样需要调整为正数索引,保证正确访问数组元素。 [2024-12-21 16:15:59 | AI写代码神器 | 328点数解答]