编程实现如下功能: (1)根据输入的查找表的表长n和n个关键字值,建立顺序查找表,并在此查找表中用顺序查找方法查找给定关键值的记录,最后输出查找结果。 (2)根据输入的查找表的表长n和n个按升排列的关键字值,建立有序顺序查找表,并在此查找表中用二分查找方法查找给定关键值的记录,最后输出查找结果。 (3)主程序中要求设计一个菜单,允许用户通过菜单来多次选择执行哪一种查找操作。要求用c语言实现
时间: 2024-03-25 11:41:21 浏览: 45
以下是用C语言编写的实现上述功能的程序:
```c
#include <stdio.h>
#include <stdlib.h>
//顺序查找
int seq_search(int a[], int n, int key) {
int i;
for (i = 0; i < n; i++) {
if (a[i] == key) {
return i;
}
}
return -1;
}
//二分查找
int bin_search(int a[], int n, int key) {
int low = 0, high = n - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (a[mid] == key) {
return mid;
} else if (a[mid] < key) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
//建立顺序查找表
void build_seq_table(int a[], int n) {
printf("请输入%d个关键字值:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
}
//建立有序顺序查找表
void build_ordered_seq_table(int a[], int n) {
printf("请输入%d个升序排列的关键字值:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
}
int main() {
int op, n, key, index;
int *a;
printf("请输入表长n:\n");
scanf("%d", &n);
a = (int *) malloc(sizeof(int) * n);
printf("请选择操作:\n");
printf("1. 建立顺序查找表并查找\n");
printf("2. 建立有序顺序查找表并查找\n");
printf("3. 退出\n");
while (1) {
printf("请输入操作编号:\n");
scanf("%d", &op);
switch (op) {
case 1:
build_seq_table(a, n);
printf("请输入要查找的关键字值:\n");
scanf("%d", &key);
index = seq_search(a, n, key);
if (index != -1) {
printf("查找成功,关键字值%d在表中的位置为%d\n", key, index);
} else {
printf("查找失败,关键字值%d不在表中\n", key);
}
break;
case 2:
build_ordered_seq_table(a, n);
printf("请输入要查找的关键字值:\n");
scanf("%d", &key);
index = bin_search(a, n, key);
if (index != -1) {
printf("查找成功,关键字值%d在表中的位置为%d\n", key, index);
} else {
printf("查找失败,关键字值%d不在表中\n", key);
}
break;
case 3:
free(a);
exit(0);
default:
printf("无效操作\n");
}
}
return 0;
}
```
程序中使用了`seq_search()`和`bin_search()`函数来实现顺序查找和二分查找。`build_seq_table()`和`build_ordered_seq_table()`函数用于建立顺序查找表和有序顺序查找表。主程序中通过菜单选择执行哪一种查找操作,并调用相应的函数进行查找。注意,在程序结束前需要释放动态分配的数组空间。
这是一个简单的实现,可以根据需要进行修改和扩展。
阅读全文