c语言编程实现如下功能: (1)根据输入的查找表的表长n和n个关键字值,建立顺序查找表,并在此查找表中用顺序查找方法查找给定关键值的记录,最后输出查找结果。 (2)根据输入的查找表的表长n和n个按升排列的关键字值,建立有序顺序查找表,并在此查找表中用二分查找方法查找给定关键值的记录,最后输出查找结果。 (3)主程序中要求设计一个菜单,允许用户通过菜单来多次选择执行哪一种查找操作。
时间: 2024-03-25 08:39:44 浏览: 53
以下是实现上述功能的C语言代码:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int key;
int value;
} Record;
void create_table(Record *table, int n) {
for (int i = 0; i < n; i++) {
printf("请输入第%d个关键字值:", i + 1);
scanf("%d", &table[i].key);
printf("请输入第%d个关键字值对应的记录值:", i + 1);
scanf("%d", &table[i].value);
}
}
void sequential_search(Record *table, int n, int target) {
for (int i = 0; i < n; i++) {
if (table[i].key == target) {
printf("找到记录,键值为:%d,记录值为:%d\n", table[i].key, table[i].value);
return;
}
}
printf("未找到记录,键值为:%d\n", target);
}
void binary_search(Record *table, int n, int target) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (table[mid].key == target) {
printf("找到记录,键值为:%d,记录值为:%d\n", table[mid].key, table[mid].value);
return;
} else if (table[mid].key < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
printf("未找到记录,键值为:%d\n", target);
}
int main() {
int n;
int choice;
Record table[100];
while (1) {
printf("菜单:\n");
printf("1. 建立顺序查找表并进行顺序查找\n");
printf("2. 建立有序顺序查找表并进行二分查找\n");
printf("3. 退出程序\n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入查找表的表长:");
scanf("%d", &n);
create_table(table, n);
printf("请输入要查找的关键字值:");
int target1;
scanf("%d", &target1);
sequential_search(table, n, target1);
break;
case 2:
printf("请输入查找表的表长:");
scanf("%d", &n);
create_table(table, n);
printf("请输入要查找的关键字值:");
int target2;
scanf("%d", &target2);
binary_search(table, n, target2);
break;
case 3:
exit(0);
default:
printf("无效的选择,请重新输入。\n");
}
}
return 0;
}
```
其中,用户可以通过菜单选择建立顺序查找表并进行顺序查找或建立有序顺序查找表并进行二分查找。在进行查找时,用户需要输入要查找的关键字值。如果找到了匹配的记录,则输出记录的键值和记录值;如果未找到,则输出未找到的信息。用户可以通过菜单多次选择执行不同的查找操作。
阅读全文