c语言算法1:采用顺序存储结构创建静态查找表,对查找表进行顺序查找和改进的顺序查找,并对其查找效率进行比较;
时间: 2024-02-06 20:04:01 浏览: 66
好的,以下是采用 C 语言实现顺序存储结构创建静态查找表,对查找表进行顺序查找和改进的顺序查找的算法代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_SIZE 100 // 定义查找表的最大长度
#define NOT_FOUND -1 // 定义查找失败的返回值
typedef struct {
int key; // 关键字
int value; // 数据元素的值
} ElemType;
// 定义静态查找表
typedef struct {
ElemType elem[MAX_SIZE]; // 存储数据元素的数组
int length; // 查找表的长度
} SSTable;
// 初始化查找表
void InitSSTable(SSTable *tbl)
{
srand(time(NULL)); // 以当前时间作为随机种子
tbl->length = 0;
// 随机生成数据元素的值和关键字
for (int i = 0; i < MAX_SIZE; i++) {
tbl->elem[i].key = rand() % MAX_SIZE; // 生成 0~MAX_SIZE 之间的随机整数
tbl->elem[i].value = i;
tbl->length++;
}
}
// 实现顺序查找算法
int SeqSearch(SSTable *tbl, int key)
{
for (int i = 0; i < tbl->length; i++) {
if (tbl->elem[i].key == key) {
return i; // 返回关键字在表中的位置
}
}
return NOT_FOUND; // 查找失败
}
// 实现改进的顺序查找算法
int SeqSearch_Improved(SSTable *tbl, int key)
{
int i;
for (i = 0; i < tbl->length && tbl->elem[i].key != key; i++);
if (i < tbl->length && i > 0 && tbl->elem[i-1].key == key) {
// 将被查找到的元素移到数组的前面
ElemType tmp = tbl->elem[i];
tbl->elem[i] = tbl->elem[i-1];
tbl->elem[i-1] = tmp;
return i - 1;
}
return NOT_FOUND; // 查找失败
}
int main()
{
SSTable tbl;
InitSSTable(&tbl);
int key = rand() % MAX_SIZE; // 随机生成一个关键字
clock_t start, end;
double time_seq, time_seq_improved;
start = clock();
int pos = SeqSearch(&tbl, key);
end = clock();
if (pos != NOT_FOUND) {
printf("顺序查找:元素 %d 在表中的位置是 %d\n", key, pos);
} else {
printf("顺序查找:元素 %d 不存在于表中\n", key);
}
time_seq = (double)(end - start) / CLOCKS_PER_SEC;
start = clock();
pos = SeqSearch_Improved(&tbl, key);
end = clock();
if (pos != NOT_FOUND) {
printf("改进的顺序查找:元素 %d 在表中的位置是 %d\n", key, pos);
} else {
printf("改进的顺序查找:元素 %d 不存在于表中\n", key);
}
time_seq_improved = (double)(end - start) / CLOCKS_PER_SEC;
printf("顺序查找用时:%f 秒\n", time_seq);
printf("改进的顺序查找用时:%f 秒\n", time_seq_improved);
return 0;
}
```
代码解释:
1. 定义 `ElemType` 结构体,用于存储数据元素的值和关键字。
2. 定义 `SSTable` 结构体,用于存储静态查找表,包括存储数据元素的数组和查找表的长度。
3. 实现 `InitSSTable` 函数,用于初始化查找表,随机生成数据元素的值和关键字。
4. 实现 `SeqSearch` 函数,用于实现顺序查找算法,依次比较每个元素的关键字,找到相同的关键字则返回其在表中的位置。
5. 实现 `SeqSearch_Improved` 函数,用于实现改进的顺序查找算法,将被查找到的元素移到数组的前面,以提高下一次查找的效率。
6. 在 `main` 函数中,随机生成一个关键字,调用 `SeqSearch` 和 `SeqSearch_Improved` 函数分别查找关键字,并计算查找的时间。
7. 输出查找结果和查找时间。
希望这段代码可以帮助你理解算法。
阅读全文