编程实现如下功能: (1)根据输入的查找表的表长n和n个关键字值,建立顺序查找表,并在此查找表中用顺序查找方法查找给定关键值的记录,最后输出查找结果。 (2)根据输入的查找表的表长n和n个按升排列的关键字值,建立有序顺序查找表,并在此查找表中用二分查找方法查找给定关键值的记录,最后输出查找结果。 (3)主程序中要求设计一个菜单,允许用户通过菜单来多次选择执行哪一种查找操作。用c语言写出完整代码
时间: 2024-03-17 13:44:24 浏览: 18
以下是C语言实现以上功能的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义结构体存储表中的关键字和记录
typedef struct {
int key;
int value;
} Record;
// 顺序查找函数
int sequentialSearch(Record table[], int n, int key) {
int i;
for (i = 0; i < n; i++) {
if (table[i].key == key) {
return i;
}
}
return -1;
}
// 二分查找函数
int binarySearch(Record table[], int n, int key) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (table[mid].key == key) {
return mid;
} else if (table[mid].key < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
// 创建顺序查找表
void createSequentialTable(Record table[], int n) {
int i;
printf("请输入%d个关键字和记录值:\n", n);
for (i = 0; i < n; i++) {
scanf("%d %d", &table[i].key, &table[i].value);
}
}
// 创建有序顺序查找表
void createOrderedTable(Record table[], int n) {
int i;
printf("请输入%d个升序排列的关键字和记录值:\n", n);
for (i = 0; i < n; i++) {
scanf("%d %d", &table[i].key, &table[i].value);
}
}
// 输出查找结果
void printResult(int index, int key, int value) {
if (index == -1) {
printf("关键字%d未找到!\n", key);
} else {
printf("关键字%d的记录为:%d\n", key, value);
}
}
int main() {
int n, key, index;
Record *table;
int operation;
printf("请选择操作:\n");
printf("1. 创建顺序查找表并查找\n");
printf("2. 创建有序顺序查找表并查找\n");
printf("3. 退出程序\n");
while (1) {
printf("请选择操作:");
scanf("%d", &operation);
switch (operation) {
case 1:
printf("请输入表长:");
scanf("%d", &n);
table = (Record*)malloc(n * sizeof(Record));
createSequentialTable(table, n);
printf("请输入要查找的关键字:");
scanf("%d", &key);
index = sequentialSearch(table, n, key);
printResult(index, key, table[index].value);
break;
case 2:
printf("请输入表长:");
scanf("%d", &n);
table = (Record*)malloc(n * sizeof(Record));
createOrderedTable(table, n);
printf("请输入要查找的关键字:");
scanf("%d", &key);
index = binarySearch(table, n, key);
printResult(index, key, table[index].value);
break;
case 3:
printf("程序已退出!\n");
exit(0);
default:
printf("输入错误,请重新选择操作!\n");
break;
}
}
return 0;
}
```
该程序通过菜单提供了两种不同的查找操作,通过输入菜单选项进行选择。在选择操作后,程序会先要求用户输入表长和关键字值,然后根据不同的操作进行表的创建和查找操作,最后输出查找结果。在输出查找结果时,程序会根据查找结果输出相应的信息。若查找成功,则输出关键字的记录值,若查找失败,则输出未找到的信息。