#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;
帮我写一个C语言线性表要求如下:1随机产生n个两位整数构造一个查找表。2输入一个整数利用顺序查找法在查找表中查找该整数是否存在。若查找成功返回该整数在表中的位置;查找失败则返回0。3对查找表按递增顺序进行排序。4输入一个整数利用折半查找法在有序表中查找该整数是否存在。若查找成功返回该整数在表中的位置;查找失败则返回0。

原文地址: https://www.cveoy.top/t/topic/fJK7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录