先依次输入元素为简单类型(int、char)的数个数据元素建立顺序存储的线性表,然后①以该线性表为查找表进行顺序查找;②用冒泡排序对该线性表按某个关键字值进行排序,在排序之后的线性表之上进行折半查找。用C语言实现
时间: 2024-03-04 09:48:48 浏览: 62
在类C语言中可用一维数组来描述顺序表-数据结构线性链表
好的,我可以为您解答这个问题。
首先,我们需要定义线性表的结构体:
```c
#define MAXSIZE 100 // 线性表的最大长度
typedef struct {
int data[MAXSIZE]; // 存储线性表的数组
int length; // 线性表的长度
} SqList;
```
接下来,我们可以定义一个函数来输入线性表的元素:
```c
void InitList(SqList *L) {
printf("请输入线性表的长度:");
scanf("%d", &(L->length));
printf("请输入线性表的元素:");
for (int i = 0; i < L->length; i++) {
scanf("%d", &(L->data[i]));
}
}
```
然后,我们可以定义一个函数来实现顺序查找:
```c
int SeqSearch(SqList L, int key) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == key) {
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 key) {
int left = 0;
int right = L.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (L.data[mid] == key) {
return mid;
} else if (L.data[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
完整代码如下:
```c
#include <stdio.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
void InitList(SqList *L) {
printf("请输入线性表的长度:");
scanf("%d", &(L->length));
printf("请输入线性表的元素:");
for (int i = 0; i < L->length; i++) {
scanf("%d", &(L->data[i]));
}
}
int SeqSearch(SqList L, int key) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == key) {
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 key) {
int left = 0;
int right = L.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (L.data[mid] == key) {
return mid;
} else if (L.data[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
SqList L;
InitList(&L);
printf("请输入要查找的元素:");
int key;
scanf("%d", &key);
printf("顺序查找结果:%d\n", SeqSearch(L, key));
BubbleSort(&L);
printf("排序后的线性表:");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n请输入要查找的元素:");
scanf("%d", &key);
printf("折半查找结果:%d\n", BinarySearch(L, key));
return 0;
}
```
阅读全文