// 分块索引查找 void search_3() { // 请根据如下图所示建立索引表和顺序查找表,然后仿照 search_1 // 写出查询测试代码int index, i; keytype key; int a[] = {14, 31, 88, 22, 18, 43, 62, 49, 35, 52, 88, 78, 71, 83}; //数据序列 indextype indexlist[3]; elemtype list[14]; // 构建查找表 list 和索引表 indexlist { // 填入你的代码 } // 仿照 search_1 写出查询测试代码。 { // 填入你的代码 } }
时间: 2024-01-04 13:04:57 浏览: 67
利用索引表实现分块查找
好的,以下是建立索引表和顺序查找表的代码:
```c++
#include <iostream>
using namespace std;
#define MAXSIZE 5 // 每块最多存储的元素个数
#define MAXINDEX 3 // 索引表的长度
typedef int keytype;
typedef int elemtype;
// 索引表的结构体
struct indextype {
keytype key;
int start; // 存储该块的起始下标
int length; // 存储该块中元素的个数
};
// 顺序查找表的结构体
struct seqtable {
elemtype data[MAXSIZE];
int length;
};
// 分块索引查找
void search_3() {
int index, i;
keytype key;
int a[] = {14, 31, 88, 22, 18, 43, 62, 49, 35, 52, 88, 78, 71, 83}; // 数据序列
// 索引表
indextype indexlist[MAXINDEX] = {{22, 0, 0}, {52, 4, 0}, {83, 8, 0}};
// 构建查找表 list 和索引表 indexlist
seqtable list[MAXINDEX];
for (i = 0; i < MAXINDEX; i++) {
int start = indexlist[i].start;
int length = (i == MAXINDEX - 1) ? (sizeof(a) / sizeof(a[0]) - start) : MAXSIZE;
indexlist[i].length = length;
for (int j = 0; j < length; j++) {
list[i].data[j] = a[start + j];
}
list[i].length = length;
}
// 查询测试代码
cout << "请输入要查找的元素的值:";
cin >> key;
index = -1;
for (i = 0; i < MAXINDEX; i++) {
if (key <= indexlist[i].key) {
index = i;
break;
}
}
if (index == -1) {
cout << "未找到该元素!" << endl;
return;
}
int start = indexlist[index].start;
int length = indexlist[index].length;
for (i = 0; i < length; i++) {
if (key == list[index].data[i]) {
cout << "元素" << key << "在第" << start + i << "个位置被找到!" << endl;
return;
}
}
cout << "未找到该元素!" << endl;
}
```
其中,索引表中每个元素包含一个键值、该块的起始下标和该块中元素的个数;顺序查找表中每个元素是一个数组,存储该块中的元素。在查询时,先通过索引表找到待查元素所在的块,再在该块中进行顺序查找。
阅读全文