C语言编程实现如下功能: (1)根据输入的查找表的表长n和n个关键字值,建立顺序查找表,并在此查找表中用顺序查找方法查找给定关键值的记录,最后输出查找结果。 (2)根据输入的查找表的表长n和n个按升排列的关键字值,建立有序顺序查找表,并在此查找表中用二分查找方法查找给定关键值的记录,最后输出查找结果。 (3)主程序中要求设计一个菜单,允许用户通过菜单来多次选择执行哪一种查找操作。
时间: 2024-03-25 08:41:35 浏览: 72
C语言编程的词法分析器,可具体定位到每一行查找出错误并生成二元式形式文件
以下是C语言实现的代码,实现了根据输入的关键字值和查找表长度,建立顺序查找表和有序顺序查找表,并使用顺序查找和二分查找方法进行查找。
```c
#include <stdio.h>
#include <stdlib.h>
// 顺序查找函数
int sequentialSearch(int* a, int n, int key) {
for (int i = 0; i < n; i++) {
if (a[i] == key) {
return i;
}
}
return -1;
}
// 二分查找函数
int binarySearch(int* a, int n, int key) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid] == key) {
return mid;
} else if (a[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
// 建立顺序查找表
void createSequentialTable(int* a, int n) {
printf("请输入%d个关键字值:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
}
// 建立有序顺序查找表
void createOrderedSequentialTable(int* a, int n) {
printf("请输入%d个按升序排列的关键字值:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
}
// 菜单函数
int menu() {
int choice;
printf("\n1.顺序查找\n");
printf("2.二分查找\n");
printf("3.退出程序\n");
printf("请选择要执行的操作:");
scanf("%d", &choice);
return choice;
}
int main() {
int n, key, index, choice;
int* a;
printf("请输入查找表的长度:");
scanf("%d", &n);
a = (int*)malloc(n * sizeof(int));
createSequentialTable(a, n);
createOrderedSequentialTable(a, n);
while (1) {
choice = menu();
switch (choice) {
case 1:
printf("请输入要查找的关键字值:");
scanf("%d", &key);
index = sequentialSearch(a, n, key);
if (index >= 0) {
printf("查找成功,关键字值%d在查找表的第%d个位置\n", key, index + 1);
} else {
printf("查找失败,查找表中不存在关键字值%d\n", key);
}
break;
case 2:
printf("请输入要查找的关键字值:");
scanf("%d", &key);
index = binarySearch(a, n, key);
if (index >= 0) {
printf("查找成功,关键字值%d在查找表的第%d个位置\n", key, index + 1);
} else {
printf("查找失败,查找表中不存在关键字值%d\n", key);
}
break;
case 3:
free(a);
printf("程序已退出\n");
return 0;
default:
printf("输入错误,请重新选择\n");
break;
}
}
}
```
在程序中,首先通过`createSequentialTable`函数和`createOrderedSequentialTable`函数分别建立顺序查找表和有序顺序查找表。然后通过`menu`函数实现菜单功能,让用户选择要执行的操作。选择`1`时,调用`sequentialSearch`函数进行顺序查找;选择`2`时,调用`binarySearch`函数进行二分查找。
注意,在用户选择退出程序并输入`3`时,需要使用`free`函数释放动态分配的内存。
阅读全文