4.已知顺序表存储的学生信息包括姓名(用自己的名字拼音)、年龄、数据结构成绩,要求自定义函数,实现插入和删除的操作。(包括结构体定义、主函数、输入函数、输出函数、插入操作、删除操作)
时间: 2024-12-11 17:24:06 浏览: 30
在C语言中,我们可以创建一个结构体来表示学生信息,并自定义函数实现插入和删除功能。首先,我们需要定义一个名为`Student`的结构体:
```c
#include <stdio.h>
#include <stdlib.h>
// 结构体定义
typedef struct {
char name[50]; // 使用拼音代替英文名
int age;
float data_structure_score;
} Student;
// 插入操作
void insert(Student** students, int* size, const char* name, int age, float score) {
if (*size == MAX_SIZE) { // 如果已满
printf("Error: List is full.\n");
return;
}
Student* new_student = (Student*)malloc(sizeof(Student));
strcpy(new_student->name, name);
new_student->age = age;
new_student->data_structure_score = score;
students[*size] = new_student;
(*size)++;
}
// 删除操作
void delete(Student** students, int* size, int index) {
if (index >= 0 && index < *size) {
Student* temp = students[index];
memmove(students + index, students + index + 1, sizeof(Student) * (*size - index - 1));
free(temp);
(*size)--;
} else {
printf("Error: Index out of range.\n");
}
}
// 主函数
int main() {
const int MAX_SIZE = 10; // 定义最大容量
Student* students = malloc(MAX_SIZE * sizeof(Student)); // 初始化动态数组
int size = 0;
// 输入函数
void input(Student** students, int* size) {
while (size < MAX_SIZE) {
printf("Enter student information (name, age, score): ");
scanf("%s %d %f", students[size]->name, &students[size]->age, &students[size]->data_structure_score);
size++;
}
}
// 输出函数
void output(Student* students, int size) {
for (int i = 0; i < size; i++) {
printf("Name: %s, Age: %d, Data Structure Score: %.2f\n", students[i].name, students[i].age, students[i].data_structure_score);
}
}
// 其他辅助函数...
// 示例流程
input(&students, &size);
// 进行插入和删除操作
// 输出(&students, size)
// 清理内存
for (int i = 0; i < size; i++) {
free(students[i]);
}
free(students);
return 0;
}
```
在这个示例中,我们定义了`Student`结构体,以及插入、删除、输入和输出函数。`main()`函数负责控制整个流程。注意在实际应用中,你需要处理可能出现的错误情况,比如文件读写失败等。
阅读全文