建立并初始化含有学生信息的线性表,每个结点的学生信息包括:编号、姓名、年龄。 要求: 构建十个元素组成的顺序结构的线性表,编写程序,分别使用顺序查找和折半查找,找到相应编号对应的学生信息。
时间: 2023-06-04 20:07:14 浏览: 135
好的,这个问题属于程序设计方面的内容,可以回答。
首先,我们需要定义一个结构体来存储学生信息,包括编号、姓名和年龄:
```
typedef struct {
int id; // 学生编号
char name[20]; // 学生姓名,假设最多20个字符
int age; // 学生年龄
} Student;
```
然后,我们创建一个静态数组来存储学生信息,初始化为10个元素:
```
#define MAX_SIZE 10
Student students[MAX_SIZE] = {
{1, "张三", 20},
{2, "李四", 21},
{3, "王五", 22},
{4, "赵六", 23},
{5, "钱七", 24},
{6, "孙八", 25},
{7, "周九", 26},
{8, "吴十", 27},
{9, "郑十一", 28},
{10, "冯十二", 29}
};
```
现在我们可以进行顺序查找和折半查找了。
顺序查找的代码如下:
```
Student *seqSearch(int id) {
int i;
for (i = 0; i < MAX_SIZE; i++) {
if (id == students[i].id) {
return &students[i];
}
}
return NULL;
}
```
折半查找的代码如下:
```
// 数组必须是有序的,这里我们按照编号从小到大排序
int comp(const void *a, const void *b) {
return ((Student *)a)->id - ((Student *)b)->id;
}
Student *binSearch(int id) {
int low = 0, high = MAX_SIZE - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (id == students[mid].id) {
return &students[mid];
} else if (id < students[mid].id) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return NULL;
}
```
我们可以在主函数中测试一下:
```
#include <stdio.h>
int main() {
int id = 3;
Student *s;
// 顺序查找
s = seqSearch(id);
if (s) {
printf("顺序查找:学生编号 %d 的学生姓名为 %s,年龄为 %d\n", s->id, s->name, s->age);
} else {
printf("顺序查找:未找到学生编号为 %d 的学生\n", id);
}
// 折半查找
qsort(students, MAX_SIZE, sizeof(Student), comp);
s = binSearch(id);
if (s) {
printf("折半查找:学生编号 %d 的学生姓名为 %s,年龄为 %d\n", s->id, s->name, s->age);
} else {
printf("折半查找:未找到学生编号为 %d 的学生\n", id);
}
return 0;
}
```
输出结果为:
```
顺序查找:学生编号 3 的学生姓名为 王五,年龄为 22
折半查找:学生编号 3 的学生姓名为 王五,年龄为 22
```
以上就是关于建立并初始化含有学生信息的线性表,使用顺序查找和折半查找找到相应编号对应的学生信息的解答。
阅读全文