1.先依次输入元素为简单类型(int、char)的数个数据元素建立顺序存储的线性表,然后以该线性表为查找表进行顺序查找;再用冒泡排序对该线性表按某个关键字值进行排序,在排序之后的线性表之上进行折半查找。用C语言实现
时间: 2024-03-14 09:48:00 浏览: 64
好的,我会尽力回答你的问题。
首先,建立顺序存储的线性表可以使用数组来实现。以下是一个简单的示例代码:
```c
#define MAX_SIZE 100 // 线性表最大长度
typedef struct {
int data[MAX_SIZE]; // 存储元素的数组
int length; // 线性表长度
} SqList;
// 初始化线性表
void initList(SqList *L) {
L->length = 0;
}
// 在线性表尾部插入元素
void insert(SqList *L, int value) {
if (L->length == MAX_SIZE) {
printf("List overflow\n");
return;
}
L->data[L->length++] = value;
}
```
接着,我们可以使用顺序查找算法在该线性表中查找某个元素。以下是一个简单的顺序查找函数:
```c
int seqSearch(SqList *L, int value) {
for (int i = 0; i < L->length; i++) {
if (L->data[i] == value) {
return i;
}
}
return -1; // 表示未找到
}
```
然后,我们可以使用冒泡排序算法对线性表进行排序。以下是一个简单的冒泡排序函数:
```c
void bubbleSort(SqList *L) {
for (int i = 0; i < L->length - 1; i++) {
for (int j = 0; j < L->length - i - 1; j++) {
if (L->data[j] > L->data[j+1]) {
int temp = L->data[j];
L->data[j] = L->data[j+1];
L->data[j+1] = temp;
}
}
}
}
```
最后,我们可以使用折半查找算法在排序后的线性表中查找某个元素。以下是一个简单的折半查找函数:
```c
int binarySearch(SqList *L, int value) {
int left = 0, right = L->length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (L->data[mid] == value) {
return mid;
} else if (L->data[mid] < value) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 表示未找到
}
```
综合以上代码,我们可以实现完整的程序:
```c
#include <stdio.h>
#define MAX_SIZE 100 // 线性表最大长度
typedef struct {
int data[MAX_SIZE]; // 存储元素的数组
int length; // 线性表长度
} SqList;
// 初始化线性表
void initList(SqList *L) {
L->length = 0;
}
// 在线性表尾部插入元素
void insert(SqList *L, int value) {
if (L->length == MAX_SIZE) {
printf("List overflow\n");
return;
}
L->data[L->length++] = value;
}
// 顺序查找
int seqSearch(SqList *L, int value) {
for (int i = 0; i < L->length; i++) {
if (L->data[i] == value) {
return i;
}
}
return -1; // 表示未找到
}
// 冒泡排序
void bubbleSort(SqList *L) {
for (int i = 0; i < L->length - 1; i++) {
for (int j = 0; j < L->length - i - 1; j++) {
if (L->data[j] > L->data[j+1]) {
int temp = L->data[j];
L->data[j] = L->data[j+1];
L->data[j+1] = temp;
}
}
}
}
// 折半查找
int binarySearch(SqList *L, int value) {
int left = 0, right = L->length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (L->data[mid] == value) {
return mid;
} else if (L->data[mid] < value) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 表示未找到
}
int main() {
SqList L;
initList(&L);
// 依次输入元素为简单类型的数个数据元素
insert(&L, 3);
insert(&L, 9);
insert(&L, 1);
insert(&L, 6);
insert(&L, 4);
// 顺序查找
int index = seqSearch(&L, 6);
if (index != -1) {
printf("在位置 %d 找到元素 %d\n", index, L.data[index]);
} else {
printf("未找到元素\n");
}
// 冒泡排序
bubbleSort(&L);
printf("排序后的线性表:");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
// 折半查找
index = binarySearch(&L, 6);
if (index != -1) {
printf("在位置 %d 找到元素 %d\n", index, L.data[index]);
} else {
printf("未找到元素\n");
}
return 0;
}
```
希望这个程序可以帮助你解决问题。如果你有任何疑问,可以随时问我。
阅读全文