编写一个完整C语言程序建立一个有序的顺序表,利用折半查找方法查找元素。要求能进行多次查找,并对每次查找输出结果,成功则输出在有序表中的位置,失败则输出“无此元素,并给出运行实例
时间: 2024-03-26 22:42:24 浏览: 55
好的,我来为您编写这个程序。
```c
#include <stdio.h>
#define MAXSIZE 100
// 定义顺序表结构体
typedef struct {
int elem[MAXSIZE]; // 存放元素的数组
int length; // 当前顺序表长度
} SqList;
// 初始化顺序表
void InitList(SqList *L) {
L->length = 0;
}
// 插入元素
void ListInsert(SqList *L, int elem) {
int i, j;
for (i = 0; i < L->length && L->elem[i] < elem; i++);
for (j = L->length; j > i; j--) {
L->elem[j] = L->elem[j-1];
}
L->elem[i] = elem;
L->length++;
}
// 折半查找
int BinarySearch(SqList L, int elem) {
int low = 0, high = L.length-1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (L.elem[mid] == elem) {
return mid;
} else if (L.elem[mid] < elem) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
int main() {
SqList L;
int elem, pos;
InitList(&L);
ListInsert(&L, 5);
ListInsert(&L, 8);
ListInsert(&L, 12);
ListInsert(&L, 15);
ListInsert(&L, 20);
while (1) {
printf("请输入要查找的元素(-1表示退出):");
scanf("%d", &elem);
if (elem == -1) {
break;
}
pos = BinarySearch(L, elem);
if (pos == -1) {
printf("无此元素\n");
} else {
printf("元素%d在有序表中的位置是%d\n", elem, pos+1);
}
}
return 0;
}
```
这个程序实现了建立一个有序的顺序表和折半查找元素的功能。您可以通过输入要查找的元素来进行多次查找,每次查找的结果会被输出。如果查找成功,输出该元素在有序表中的位置;如果查找失败,输出“无此元素”。下面是程序的运行实例:
```
请输入要查找的元素(-1表示退出):8
元素8在有序表中的位置是2
请输入要查找的元素(-1表示退出):20
元素20在有序表中的位置是5
请输入要查找的元素(-1表示退出):10
无此元素
请输入要查找的元素(-1表示退出):-1
```
阅读全文