下面是一个简单的顺序表实现,以及如何使用它来存储学生信息。请注意,`student`结构体需要包含至少两个成员,一个是`id`(学号)和另一个是`score`(成绩)。在下面的代码中,我将提供这些结构体和必要的功能来初始化、填充和输出顺序表中的数据。
```c
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define MAXSIZE 10
// 定义数据元素类型
typedef struct {
int id; // 学号
float score; // 成绩
} student;
// 定义顺序表结构体
typedef struct {
student *elem; // 指向动态分配的数组的指针
int length; // 顺序表中当前元素的个数
int listSize; // 顺序表的最大容量
} SqList;
// 初始化顺序表
void initList(SqList *L) {
L->elem = (student*) malloc(MAXSIZE * sizeof(student));
L->length = 0;
L->listSize = MAXSIZE;
}
// 向顺序表中添加一个学生记录
void addStudent(SqList *L, student s) {
if (L->length >= L->listSize) {
printf("顺序表已满,无法添加新的学生记录。\n");
return;
}
L->elem[L->length++] = s;
}
// 打印顺序表中的所有学生记录
void printList(SqList *L) {
for (int i = 0; i < L->length; ++i) {
printf("学号: %d, 成绩: %.2f\n", L->elem[i].id, L->elem[i].score);
}
}
int main() {
// 定义一个顺序表变量
SqList list;
initList(&list);
// 初始化顺序表变量:分配10个存储空间
for (int i = 0; i < 3; ++i) {
student s = { 1000000 + i, 75.0 }; // 举例的学号和成绩
addStudent(&list, s); // 添加学生记录到顺序表
}
// 输出顺序表中所有数据元素的信息(for循环实现)
printf("所有学生记录如下:\n");
printList(&list);
// 释放动态分配的内存
free(list.elem);
return 0;
}
```
这段代码定义了一个`SqList`结构体和一个`student`结构体,分别用来存储学生记录的数组和单个学生的信息。我们定义了三个函数`initList`来初始化顺序表,`addStudent`来向顺序表中添加学生记录,以及`printList`来打印顺序表中的所有学生记录。
在`main`函数中,我们首先初始化顺序表并给它分配了最大容量为`MAXSIZE`的空间。然后,我们循环三次,每次循环都创建一个新的学生记录,并将其添加到顺序表中。最后,我们调用`printList`函数来打印出所有的学生记录,并释放了之前动态分配的内存。
请注意,这段代码假设`student`结构体只包含`id`和`score`两个成员。如果还有其他成员或需求,需要适当修改代码。