c语言根据输入的查找表的表长n和n个关键字值,建立顺序查找表,并在此查找表中用顺序查找方法及二分查找方法查找给定关键值的记录,最后输出查找结果。
时间: 2023-07-19 11:26:34 浏览: 122
编写函数,建立一个顺序表并输出,计算该顺序表的长度。 实现在顺序表中查找第i个元素的值。实现在顺序表中第i个位置上插入值为x的
5星 · 资源好评率100%
好的,这是一个关于建立顺序查找表并进行查找的问题,我会尽力回答。
首先,建立顺序查找表的过程如下:
1. 定义结构体,用于存储关键字值和记录数据。
```c
typedef struct {
int key; // 关键字
char data[20]; // 记录数据
} RecordType;
```
2. 定义顺序查找表类型,包括表长和记录数组。
```c
typedef struct {
RecordType *r; // 记录数组
int length; // 表长
} SSTable;
```
3. 初始化顺序查找表,动态分配记录数组空间,并读入关键字值和记录数据。
```c
void InitSSTable(SSTable *T) {
printf("请输入表长:");
scanf("%d", &T->length);
T->r = (RecordType*)malloc((T->length + 1) * sizeof(RecordType));
printf("请输入%d个关键字和记录数据:\n", T->length);
for (int i = 1; i <= T->length; i++) {
scanf("%d%s", &T->r[i].key, T->r[i].data);
}
}
```
4. 顺序查找关键字值为key的记录,返回记录在顺序查找表中的位置,若不存在返回0。
```c
int Search_Seq(SSTable T, int key) {
int i;
for (i = 1; i <= T.length && T.r[i].key != key; i++);
if (i > T.length) return 0; // 未找到
else return i; // 返回位置
}
```
5. 二分查找关键字值为key的记录,返回记录在顺序查找表中的位置,若不存在返回0。
```c
int Search_Bin(SSTable T, int key) {
int low = 1, high = T.length, mid;
while (low <= high) {
mid = (low + high) / 2;
if (T.r[mid].key == key) return mid;
else if (T.r[mid].key > key) high = mid - 1;
else low = mid + 1;
}
return 0; // 未找到
}
```
6. 主函数中调用以上函数,输入要查找的关键字值,并输出查找结果。
```c
int main() {
SSTable T;
InitSSTable(&T);
int key;
printf("请输入要查找的关键字:");
scanf("%d", &key);
int pos = Search_Seq(T, key); // 或者调用Search_Bin(T, key)
if (pos == 0) printf("未找到该记录!\n");
else printf("该记录在顺序查找表中的位置为:%d,记录数据为:%s\n", pos, T.r[pos].data);
free(T.r); // 释放动态分配的空间
return 0;
}
```
以上就是建立顺序查找表并进行查找的过程,希望能够帮助你解决问题。
阅读全文