采用结构体类型描述查找表的存储结构,编写具体函数实现查找表的顺序查找和折半查找等基本操作
时间: 2024-02-03 18:12:11 浏览: 106
数据结构顺序表的查找,删除等一系列操作
以下是采用结构体类型描述查找表的存储结构的示例代码,包括顺序查找和折半查找的实现。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义查找表的最大长度
// 定义查找表中元素的结构体类型
typedef struct {
int key; // 关键字
char name[20]; // 其他数据域
} ElemType;
// 定义顺序查找函数,返回元素在表中的位置
int SeqSearch(ElemType *lst, int n, int key) {
int i;
for (i = 0; i < n; i++) {
if (lst[i].key == key) {
return i;
}
}
return -1; // 未找到元素返回-1
}
// 定义折半查找函数,返回元素在表中的位置
int BinSearch(ElemType *lst, int n, int key) {
int low = 0, high = n - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (lst[mid].key == key) {
return mid;
} else if (lst[mid].key < key) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1; // 未找到元素返回-1
}
int main() {
int n, i, key, pos;
ElemType lst[MAXSIZE];
// 输入查找表的长度和元素
printf("请输入查找表的长度:");
scanf("%d", &n);
printf("请依次输入%d个元素的关键字和其他数据域:\n", n);
for (i = 0; i < n; i++) {
scanf("%d%s", &lst[i].key, lst[i].name);
}
// 顺序查找
printf("请输入要查找的元素的关键字:");
scanf("%d", &key);
pos = SeqSearch(lst, n, key);
if (pos != -1) {
printf("元素%s的关键字为%d,位于查找表的第%d个位置。\n", lst[pos].name, lst[pos].key, pos + 1);
} else {
printf("未找到关键字为%d的元素。\n", key);
}
// 折半查找
printf("请输入要查找的元素的关键字:");
scanf("%d", &key);
pos = BinSearch(lst, n, key);
if (pos != -1) {
printf("元素%s的关键字为%d,位于查找表的第%d个位置。\n", lst[pos].name, lst[pos].key, pos + 1);
} else {
printf("未找到关键字为%d的元素。\n", key);
}
return 0;
}
```
在以上代码中,定义了一个结构体类型 `ElemType`,用于描述查找表中的元素。每个元素包含一个关键字 `key` 和其他数据域 `name`。`SeqSearch` 函数实现了顺序查找算法,`BinSearch` 函数实现了折半查找算法。在 `main` 函数中,先读入查找表的长度和元素,然后依次进行顺序查找和折半查找。如果找到了元素,则输出该元素的关键字和其他数据域以及在表中的位置;否则输出未找到的提示信息。
阅读全文