用结构体类型描述查找表的存储结构,编写具体函数实现查找表的顺序查找与折半查找等基本操作,编写完整代码程序,在程序运行后的输入框中输入一个有序表,接着输入要查找的数据元素,若找到,则输出结果为查找的数据元素在有序表中的位置,否则输出结果为0,并给出一个具体实例。
时间: 2023-11-10 15:06:18 浏览: 61
数据结构顺序表的查找,删除等一系列操作
下面是一个使用结构体描述查找表的示例代码,包括顺序查找和折半查找的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// 定义结构体类型
typedef struct {
int key; // 关键字
char name[20]; // 名称
} RecordType;
// 定义查找表类型
typedef struct {
RecordType r[MAX_SIZE + 1]; // 存储数据元素,r[0]未用
int length; // 表长度
} TableType;
// 顺序查找函数
int seqSearch(TableType *T, int key) {
int i;
T->r[0].key = key; // 设置哨兵
i = T->length;
while (T->r[i].key != key) {
i--;
}
return i;
}
// 折半查找函数
int binSearch(TableType *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;
}
int main() {
int i, key, pos;
TableType T;
// 输入有序表
printf("请输入有序表的长度:");
scanf("%d", &T.length);
printf("请输入有序表的数据元素(关键字 名称):\n");
for (i = 1; i <= T.length; i++) {
scanf("%d %s", &T.r[i].key, T.r[i].name);
}
// 输入要查找的数据元素
printf("请输入要查找的数据元素的关键字:");
scanf("%d", &key);
// 顺序查找
pos = seqSearch(&T, key);
if (pos != 0) {
printf("顺序查找:关键字为%d的数据元素在有序表中的位置为%d。\n", key, pos);
} else {
printf("顺序查找:未找到关键字为%d的数据元素。\n", key);
}
// 折半查找
pos = binSearch(&T, key);
if (pos != 0) {
printf("折半查找:关键字为%d的数据元素在有序表中的位置为%d。\n", key, pos);
} else {
printf("折半查找:未找到关键字为%d的数据元素。\n", key);
}
return 0;
}
```
下面是一个示例运行结果:
```
请输入有序表的长度:5
请输入有序表的数据元素(关键字 名称):
1 Alice
3 Bob
5 Charlie
7 David
9 Emily
请输入要查找的数据元素的关键字:5
顺序查找:关键字为5的数据元素在有序表中的位置为3。
折半查找:关键字为5的数据元素在有序表中的位置为3。
```
阅读全文