算法1:采用顺序存储结构创建静态查找表,对查找表进行顺序查找和改进的顺序查找,并对其查找效率进行比较;用c语言编码
时间: 2024-02-25 13:52:41 浏览: 81
以下是使用顺序存储结构创建静态查找表的c语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXSIZE 1000000 // 定义查找表的最大容量
typedef int DataType;
typedef struct {
DataType data[MAXSIZE]; // 存放数据元素的数组
int length; // 查找表长度
} SeqList;
// 初始化顺序查找表
void InitList(SeqList *L, int n) {
int i;
L->length = n;
srand((unsigned)time(NULL)); // 随机生成n个数据元素
for (i = 0; i < n; i++) {
L->data[i] = rand() % (n * 10);
}
}
// 顺序查找
int SeqSearch(SeqList *L, DataType key) {
int i;
for (i = 0; i < L->length; i++) {
if (L->data[i] == key) {
return i;
}
}
return -1; // 查找失败
}
// 改进的顺序查找
int SeqSearch_Improved(SeqList *L, DataType key) {
int i;
L->data[0] = key; // 将待查找的元素放到0号位置
i = L->length;
while (L->data[i] != key) {
i--;
}
return i; // 查找成功返回元素位置,查找失败返回-1
}
int main() {
int n, key, pos;
SeqList L;
clock_t start, finish;
double duration1, duration2;
printf("请输入查找表的长度:");
scanf("%d", &n);
InitList(&L, n);
printf("请输入待查找的元素:");
scanf("%d", &key);
// 测量顺序查找的时间
start = clock();
pos = SeqSearch(&L, key);
finish = clock();
duration1 = (double)(finish - start) / CLOCKS_PER_SEC;
if (pos != -1) {
printf("顺序查找成功,元素位置为:%d\n", pos);
} else {
printf("顺序查找失败,未找到该元素!\n");
}
// 测量改进的顺序查找的时间
start = clock();
pos = SeqSearch_Improved(&L, key);
finish = clock();
duration2 = (double)(finish - start) / CLOCKS_PER_SEC;
if (pos != -1) {
printf("改进的顺序查找成功,元素位置为:%d\n", pos);
} else {
printf("改进的顺序查找失败,未找到该元素!\n");
}
// 比较两种查找算法的效率
printf("顺序查找所用时间:%f秒\n", duration1);
printf("改进的顺序查找所用时间:%f秒\n", duration2);
if (duration1 > duration2) {
printf("改进的顺序查找更加高效!\n");
} else {
printf("顺序查找更加高效!\n");
}
return 0;
}
```
在主函数中,首先通过调用InitList函数初始化静态查找表,然后输入待查找的元素,接着调用SeqSearch函数和SeqSearch_Improved函数进行顺序查找和改进的顺序查找,最后比较两种算法的效率。
其中,SeqSearch函数实现了顺序查找算法,遍历整个查找表,查找目标元素,如果找到则返回元素位置,否则返回-1。
SeqSearch_Improved函数实现了改进的顺序查找算法,将待查找的元素放到0号位置,然后从查找表的最后一个元素开始向前查找,如果找到目标元素,则返回元素位置,否则返回-1。
在代码中我们使用了clock函数来测量两种算法的执行时间,并将执行时间输出到控制台。
阅读全文