用C语言先依次输入元素为简单类型(int、char)或自定义结构体类型(如订单信息或学生信息或员工信息)的数个数据元素建立顺序存储的线性表,然后①以该线性表为查找表进行顺序查找;②用冒泡排序对该线性表按某个关键字值进行排序,在排序之后的线性表之上进行折半查找
时间: 2024-02-22 19:55:06 浏览: 78
C#数据结构(顺序表,单链表,顺序表应用,冒泡排序,折半查找)
5星 · 资源好评率100%
好的,我会分步骤地为您解答这个问题。
首先,我们需要定义一个结构体来表示线性表中的元素,例如:
```c
typedef struct {
int id; // 元素的编号
char name[20]; // 元素的名称
int age; // 元素的年龄
} Element;
```
然后,我们可以定义一个数组来存储线性表中的元素:
```c
#define MAX_SIZE 100 // 线性表的最大长度
Element list[MAX_SIZE]; // 定义线性表
int length = 0; // 线性表的长度
```
接下来,我们可以编写一个函数来向线性表中添加元素:
```c
void addElement(int id, char *name, int age) {
if (length >= MAX_SIZE) {
printf("线性表已满,无法添加元素!\n");
return;
}
Element e = {id, "", age};
strncpy(e.name, name, 20);
list[length++] = e;
}
```
这个函数接受三个参数:元素的编号、名称和年龄。它会检查线性表是否已满,如果没有则创建一个新的元素并将其添加到列表中。
接下来,我们可以编写一个函数来进行顺序查找:
```c
int sequentialSearch(int id) {
for (int i = 0; i < length; i++) {
if (list[i].id == id) {
return i;
}
}
return -1;
}
```
这个函数接受一个参数:要查找的元素的编号。它将遍历整个线性表,查找包含该编号的元素。如果找到了,则返回该元素的索引;否则返回-1。
接下来,我们可以编写一个函数来进行冒泡排序:
```c
void bubbleSort() {
for (int i = 0; i < length - 1; i++) {
for (int j = 0; j < length - i - 1; j++) {
if (list[j].id > list[j+1].id) {
Element temp = list[j];
list[j] = list[j+1];
list[j+1] = temp;
}
}
}
}
```
这个函数将对线性表中的元素按照其编号进行升序排序。它会比较相邻的两个元素,如果前一个元素比后一个元素大,则交换它们的位置。
最后,我们可以编写一个函数来进行折半查找:
```c
int binarySearch(int id) {
int left = 0;
int right = length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (list[mid].id == id) {
return mid;
} else if (list[mid].id < id) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
这个函数接受一个参数:要查找的元素的编号。它将对已经按照元素编号排好序的线性表进行折半查找,如果找到了,则返回该元素的索引;否则返回-1。
最后,我们可以编写一个主函数来测试上述函数:
```c
int main() {
addElement(1, "Tom", 20);
addElement(2, "Jerry", 22);
addElement(3, "Bob", 18);
addElement(4, "Alice", 19);
printf("排序前:\n");
for (int i = 0; i < length; i++) {
printf("%d %s %d\n", list[i].id, list[i].name, list[i].age);
}
bubbleSort();
printf("排序后:\n");
for (int i = 0; i < length; i++) {
printf("%d %s %d\n", list[i].id, list[i].name, list[i].age);
}
int index = binarySearch(3);
if (index != -1) {
printf("找到了:\n");
printf("%d %s %d\n", list[index].id, list[index].name, list[index].age);
} else {
printf("没找到!\n");
}
return 0;
}
```
这个主函数会向线性表中添加四个元素,然后按照元素编号进行排序,并且测试折半查找函数。
阅读全文