编程实现如下功能: (1)根据输入的查找表的表长n和n个关键字值,建立顺序查找表,并在此查找表中用顺序查找方法查找给定关键值的记录,最后输出查找结果。 (2)根据输入的查找表的表长n和n个按升排列的关键字值,建立有序顺序查找表,并在此查找表中用二分查找方法查找给定关键值的记录,最后输出查找结果。 (3)主程序中要求设计一个菜单,允许用户通过菜单来多次选择执行哪一种查找操作。 C语言
时间: 2024-03-25 07:41:29 浏览: 67
折半查找算法在顺序表中插入一个元素讲解.pdf
以下是C语言实现以上功能的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序查找函数
int sequential_search(int *a, int n, int key) {
for (int i = 0; i < n; i++) {
if (a[i] == key) {
return i;
}
}
return -1;
}
// 定义二分查找函数
int binary_search(int *a, int n, int key) {
int left = 0, right = n - 1, mid;
while (left <= right) {
mid = (left + right) / 2;
if (a[mid] == key) {
return mid;
} else if (a[mid] > key) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
int main() {
int choice, n, key, index;
int *a;
// 打印菜单
printf("请选择查找操作:\n");
printf("1. 顺序查找\n");
printf("2. 二分查找\n");
printf("3. 退出程序\n");
while (1) {
// 用户输入操作选择
printf("请输入选择的操作序号:");
scanf("%d", &choice);
// 根据选择执行不同的操作
switch (choice) {
case 1:
// 输入查找表长度和关键字值
printf("请输入查找表长度:");
scanf("%d", &n);
a = (int *) malloc(n * sizeof(int));
printf("请输入查找表中的%d个关键字值:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
// 输入待查找的关键字值
printf("请输入待查找的关键字值:");
scanf("%d", &key);
// 顺序查找
index = sequential_search(a, n, key);
if (index == -1) {
printf("未找到该关键字值!\n");
} else {
printf("该关键字值在查找表中的位置为:%d\n", index);
}
free(a);
break;
case 2:
// 输入查找表长度和关键字值
printf("请输入查找表长度:");
scanf("%d", &n);
a = (int *) malloc(n * sizeof(int));
printf("请输入按升序排列的%d个关键字值:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
// 输入待查找的关键字值
printf("请输入待查找的关键字值:");
scanf("%d", &key);
// 二分查找
index = binary_search(a, n, key);
if (index == -1) {
printf("未找到该关键字值!\n");
} else {
printf("该关键字值在查找表中的位置为:%d\n", index);
}
free(a);
break;
case 3:
// 退出程序
printf("程序已退出!\n");
return 0;
default:
// 输入错误提示
printf("无效的操作序号,请重新输入!\n");
}
}
}
```
该程序实现了一个菜单,允许用户选择顺序查找或二分查找操作,并可以多次执行不同的操作。在选择操作后,程序会提示用户输入查找表长度和关键字值,并在查找表中查找给定的关键字值,最后输出查找结果。在顺序查找和二分查找的实现中,我们分别使用了顺序查找函数和二分查找函数进行查找。程序执行后,用户可以通过菜单不断选择操作,直到选择退出程序。
阅读全文