帮我写一个C语言线性表要求如下:1随机产生n个两位整数构造一个查找表。2输入一个整数利用顺序查找法在查找表中查找该整数是否存在。若查找成功返回该整数在表中的位置;查找失败则返回0。3对查找表按递增顺序进行排序。4输入一个整数利用折半查找法在有序表中查找该整数是否存在。若查找成功返回该整数在表中的位置;查找失败则返回0。
#include <stdio.h> #include <stdlib.h> #include <time.h>
#define MAX_SIZE 100
typedef struct { int data[MAX_SIZE]; int length; } SeqList;
void initList(SeqList *L, int n); int seqSearch(SeqList L, int key); void sortList(SeqList *L); int binarySearch(SeqList L, int key);
int main(void) { SeqList L; int n, key, pos;
printf("请输入线性表的长度:");
scanf("%d", &n);
srand((unsigned) time(NULL)); // 用系统时间初始化随机数种子
initList(&L, n); // 随机生成n个两位整数
printf("请输入要查找的整数:");
scanf("%d", &key);
pos = seqSearch(L, key); // 顺序查找
if (pos) {
printf("%d在表中的位置是%d\n", key, pos);
} else {
printf("%d不存在于表中\n", key);
}
sortList(&L); // 排序
printf("请输入要查找的整数:");
scanf("%d", &key);
pos = binarySearch(L, key); // 折半查找
if (pos) {
printf("%d在表中的位置是%d\n", key, pos);
} else {
printf("%d不存在于表中\n", key);
}
return 0;
}
// 随机生成n个两位整数 void initList(SeqList *L, int n) { int i;
for (i = 0; i < n; i++) {
L->data[i] = rand() % 90 + 10; // 生成10~99之间的随机数
}
L->length = n;
}
// 顺序查找 int seqSearch(SeqList L, int key) { int i;
for (i = 0; i < L.length; i++) {
if (L.data[i] == key) {
return i + 1;
}
}
return 0;
}
// 排序 void sortList(SeqList *L) { int i, j, min, temp;
for (i = 0; i < L->length - 1; i++) {
min = i;
for (j = i + 1; j < L->length; j++) {
if (L->data[j] < L->data[min]) {
min = j;
}
}
if (min != i) {
temp = L->data[i];
L->data[i] = L->data[min];
L->data[min] = temp;
}
}
}
// 折半查找 int binarySearch(SeqList L, int key) { int low = 0, high = L.length - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (L.data[mid] == key) {
return mid + 1;
} else if (L.data[mid] > key) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return 0;
原文地址: https://www.cveoy.top/t/topic/fJK7 著作权归作者所有。请勿转载和采集!