编程实现如下功能: (1)根据输入的查找表的表长n和n个关键字值,建立顺序查找表,并在此查找表中用顺序查找方法查找给定关键值的记录,最后输出查找结果。 (2)根据输入的查找表的表长n和n个按升排列的关键字值,建立有序顺序查找表,并在此查找表中用二分查找方法查找给定关键值的记录,最后输出查找结果。 (3)主程序中要求设计一个菜单,允许用户通过菜单来多次选择执行哪一种查找操作。C语言
时间: 2024-03-25 08:41:31 浏览: 43
以下是C语言实现该功能的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 顺序查找函数
int seq_search(int *arr, int n, int key) {
for (int i = 0; i < n; i++) {
if (arr[i] == key) {
return i;
}
}
return -1;
}
// 二分查找函数
int binary_search(int *arr, int n, int key) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
int op;
do {
// 显示菜单
printf("请选择要执行的操作:\n");
printf("1. 顺序查找\n");
printf("2. 二分查找\n");
printf("3. 退出\n");
scanf("%d", &op);
// 执行操作
switch (op) {
case 1: {
// 输入查找表
int n;
printf("请输入查找表的长度:");
scanf("%d", &n);
int *arr = (int *)malloc(n * sizeof(int));
printf("请输入%d个关键字:", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// 查找关键字
int key;
printf("请输入要查找的关键字:");
scanf("%d", &key);
int pos = seq_search(arr, n, key);
// 输出结果
if (pos == -1) {
printf("未找到该关键字\n");
} else {
printf("关键字%d位于第%d个位置\n", key, pos + 1);
}
free(arr);
break;
}
case 2: {
// 输入有序查找表
int n;
printf("请输入有序查找表的长度:");
scanf("%d", &n);
int *arr = (int *)malloc(n * sizeof(int));
printf("请输入%d个按升序排列的关键字:", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// 查找关键字
int key;
printf("请输入要查找的关键字:");
scanf("%d", &key);
int pos = binary_search(arr, n, key);
// 输出结果
if (pos == -1) {
printf("未找到该关键字\n");
} else {
printf("关键字%d位于第%d个位置\n", key, pos + 1);
}
free(arr);
break;
}
case 3: {
// 退出程序
printf("程序已退出\n");
break;
}
default: {
// 输入非法
printf("输入非法,请重新输入\n");
break;
}
}
} while (op != 3);
return 0;
}
```
注意:本代码实现了一个简单的菜单,允许用户选择要执行的操作,可以多次执行不同的查找操作。在实际使用中,还需要根据实际需求进行相应的修改和完善。
阅读全文