题目:
设计一个测试应用程序完成如下功能:
⑴建立顺序表L1;依次插入数据元素13,5,75,37,21,56,64,92,80,88,19;直至数据元素为32767为止
(2)顺序查找元素75;(输出:顺序查找75成功,第3个数)
(3)顺序查找元素50;(输出:顺序查找50失败)
(4)建立顺序表L2;依次插入数据元素5,13,19,21,37,56,64,75,80,88,92;直至数据元素为32767为止
(5)折半查找元素75;(输出:折半查找75成功,第8个数)
(6)折半查找元素50;(输出:折半查找50失败)
要求:
1. 顺序表的类型定义
//线性表存储空间的初始分配量
#define max 100 //线性表存储空间的分配增量
typedef struct{
int elem[max]; //存储区域基地址
int length; //当前有效长度
} sqlist;
2. 顺序表的基本操作
1)建立顺序表sqlistinit()
2)顺序查找search1(sqlist L,int k)
3)折半查找search2(sqlist L,int k)
示例代码:
#include <stdio.h>
#define max 100
typedef struct {
int elem[max];
int length;
} sqlist;
// 初始化顺序表
sqlist initsq() {
sqlist L;
int e, i = 0;
L.length = 0;
printf("请输入顺序表元素,以32767结束:\n");
while (1) {
scanf("%d", &e);
if (e == 32767) break;
if (L.length < max) {
L.elem[i++] = e;
L.length++;
} else {
printf("顺序表已满,无法插入元素 %d\n", e);
break; // 如果顺序表已满,结束输入
}
}
return L;
}
// 顺序查找元素
int search1(sqlist L, int k) {
for (int i = 0; i < L.length; ++i) {
if (L.elem[i] == k) {
return i + 1; // 返回元素位置(从1开始)
}
}
return 0; // 未找到返回0
}
// 折半查找元素
int search2(sqlist L, int k) {
int low = 0, high = L.length - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (L.elem[mid] == k) {
return mid + 1; // 返回元素位置(从1开始)
} else if (L.elem[mid] < k) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return 0; // 未找到返回0
}
int main() {
// 建立顺序表L1
sqlist L1 = initsq();
// 顺序查找元素75
int result1 = search1(L1, 75);
if (result1) {
printf("顺序查找75成功,第%d个数\n", result1);
} else {
printf("顺序查找75失败\n");
}
// 顺序查找元素50
int result2 = search1(L1, 50);
if (result2) {
printf("顺序查找50成功,第%d个数\n", result2);
} else {
printf("顺序查找50失败\n");
}
// 建立顺序表L2
sqlist L2 = initsq();
// 折半查找元素75
int result3 = search2(L2, 75);
if (result3) {
printf("折半查找75成功,第%d个数\n", result3);
} else {
printf("折半查找75失败\n");
}
// 折半查找元素50
int result4 = search2(L2, 50);
if (result4) {
printf("折半查找50成功,第%d个数\n", result4);
} else {
printf("折半查找50失败\n");
}
return 0;
}
运行结果:
(个人答案,如有谬误都是我的锅,还望先生救我...)