c语言编写数据结构题,详细注明,逻辑清晰。利用顺序表完成一个班级的一个学期的课程的管理:能够增加、删除、 修改学生的成绩记录。
时间: 2024-10-17 19:08:30 浏览: 28
PTA—C语言数据结构:顺序表.ppt
在C语言中,我们可以使用结构体(struct)来表示学生和课程,并通过顺序表(数组或动态数组)来管理一个班级一个学期的课程成绩。这里是一个简单的示例,我们将创建一个名为`Student`和`CourseRecord`的结构体,并实现添加、删除和修改成绩的功能。
首先,定义`Student`和`CourseRecord`结构体:
```c
typedef struct Student {
char name[50];
int id;
CourseRecord courses[10]; // 假设每个学生最多有10门课程
} Student;
typedef struct {
char courseName[50];
float score;
} CourseRecord;
```
然后,我们创建顺序表用于存放学生列表:
```c
typedef struct {
Student* students;
int size;
int capacity;
} Class;
```
接下来,初始化并操作`Class`的数据结构:
```c
void initClass(Class* classInstance, int initialCapacity) {
classInstance->students = (Student*)malloc(initialCapacity * sizeof(Student));
classInstance->size = 0;
classInstance->capacity = initialCapacity;
}
// 添加学生
void addStudent(Class* classInstance, const char* name, int id) {
if (classInstance->size == classInstance->capacity) {
resizeClass(classInstance);
}
Student* newStudent = &classInstance->students[classInstance->size];
strcpy(newStudent->name, name);
newStudent->id = id;
memset(newStudent->courses, 0, sizeof(CourseRecord) * 10);
classInstance->size++;
}
// 删除学生
void deleteStudent(Class* classInstance, int studentId) {
if (studentId < 0 || studentId >= classInstance->size) {
printf("Invalid student ID.\n");
return;
}
memmove(&classInstance->students[studentId], &classInstance->students[studentId+1],
(classInstance->size - studentId - 1) * sizeof(Student));
classInstance->size--;
}
// 修改学生成绩
void updateScore(Class* classInstance, int studentId, const char* courseName, float newScore) {
for (int i = 0; i < classInstance->size; i++) {
if (strcmp(classInstance->students[i].name, name) == 0 && strcmp(courseName, classInstance->students[i].courses[i].courseName) == 0) {
classInstance->students[i].courses[i].score = newScore;
break;
}
}
}
// 扩展容量
void resizeClass(Class* classInstance) {
classInstance->capacity *= 2;
classInstance->students = (Student*)realloc(classInstance->students, classInstance->capacity * sizeof(Student));
}
// 其他辅助函数(如显示学生列表等)
```
在这个例子中,添加、删除和修改功能都是线性的,时间复杂度为O(n),其中n是学生人数。为了提高效率,可以根据实际需求进一步优化这些操作,例如使用哈希表来快速查找学生信息。
阅读全文