用c语言实现顺序表的顺序和折半查找
时间: 2024-05-07 08:20:50 浏览: 134
顺序表是一种线性表,可以使用数组来实现。顺序查找和折半查找是两种常见的查找算法。
以下是用c语言实现顺序表的顺序查找和折半查找的示例代码:
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int length;
} SeqList;
// 初始化顺序表
void initList(SeqList* list) {
list->length = 0;
}
// 向顺序表中插入元素
void insert(SeqList* list, int value) {
if (list->length == MAX_SIZE) {
printf("List is full.\n");
return;
}
list->data[list->length++] = value;
}
// 顺序查找
int seqSearch(SeqList* list, int value) {
for (int i = 0; i < list->length; i++) {
if (list->data[i] == value) {
return i;
}
}
return -1;
}
// 折半查找
int binarySearch(SeqList* list, int value) {
int low = 0, high = list->length - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (list->data[mid] == value) {
return mid;
} else if (list->data[mid] > value) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
int main() {
SeqList list;
initList(&list);
insert(&list, 1);
insert(&list, 3);
insert(&list, 5);
insert(&list, 7);
insert(&list, 9);
int index = seqSearch(&list, 5);
if (index != -1) {
printf("Found at index %d.\n", index);
} else {
printf("Not found.\n");
}
index = binarySearch(&list, 5);
if (index != -1) {
printf("Found at index %d.\n", index);
} else {
printf("Not found.\n");
}
return 0;
}
```
在上面的示例代码中,我们定义了一个SeqList结构体来表示顺序表,包含一个数组和一个长度属性。我们使用initList函数来初始化顺序表,使用insert函数来向顺序表中插入元素。顺序查找使用seqSearch函数来实现,折半查找使用binarySearch函数来实现。
阅读全文