C语言定义一个包含学生信息(学号,姓名,成绩)的的顺序表
时间: 2024-10-09 18:02:54 浏览: 37
C语言:定义一个包含学生信息(学号,姓名,成绩)的顺序表和链表.zip
5星 · 资源好评率100%
在C语言中,我们可以使用结构体(struct)来定义一个包含学生信息的数据结构,然后使用数组或者链表来创建这种顺序表。下面是一个简单的例子,定义了一个名为`Student`的结构体,并创建了一个顺序表`StudentList`:
```c
// 定义学生信息的结构体
typedef struct {
int student_id; // 学号
char name[50]; // 姓名
float score; // 成绩
} Student;
// 定义顺序表的结构,这里假设每个元素是Student类型的
typedef struct {
Student* data; // 指向学生数据的指针
int size; // 序列中的元素个数
int capacity; // 序列的最大容量
} StudentList;
// 初始化顺序表
void init(StudentList* list) {
list->data = NULL;
list->size = 0;
list->capacity = 10; // 初始容量可以设定为10(实际应用中可以根据需求调整)
}
// 添加学生到列表
void addStudent(StudentList* list, const Student* new_student) {
if (list->size == list->capacity) { // 如果已满,需要扩容
list->capacity *= 2; // 扩容一倍
list->data = realloc(list->data, sizeof(Student*) * list->capacity);
}
list->data[list->size++] = (Student*)malloc(sizeof(Student)); // 动态分配内存
memcpy(list->data[list->size - 1], new_student, sizeof(Student));
}
// 删除学生
void removeStudent(StudentList* list, int index) {
if (index < 0 || index >= list->size) return;
free(list->data[index]);
memmove(list->data + index, list->data + index + 1, sizeof(Student*) * (list->size - index - 1));
list->size--;
}
// 示例相关问题:
1. 如何从顺序表中获取学生的某个信息?
2. 怎么遍历这个顺序表?
3. 这种顺序表支持动态扩容吗?如果支持,何时会触发扩容操作?
阅读全文