7-2 学生顺序表的建立 分数 10 作者 郝晓玲 单位 西南石油大学
时间: 2024-05-13 15:16:12 浏览: 113
学生顺序表的建立是一种基础的数据结构操作,适用于学生信息管理系统等场景。下面是一个简单的示例代码,可以帮助你了解如何使用C语言建立学生顺序表。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100 // 最大学生数量
// 学生结构体
typedef struct {
int id; // 学号
char name[20]; // 姓名
int score; // 分数
} Student;
// 学生顺序表结构体
typedef struct {
Student students[MAX_SIZE]; // 学生数组
int length; // 学生数量
} StudentList;
// 初始化学生顺序表
void initStudentList(StudentList *list) {
list->length = 0;
}
// 添加学生
void addStudent(StudentList *list, Student student) {
if (list->length >= MAX_SIZE) {
printf("学生数量已满,无法添加!\n");
return;
}
list->students[list->length] = student;
list->length++;
}
// 根据学号查找学生
int findStudentById(StudentList list, int id) {
for (int i = 0; i < list.length; i++) {
if (list.students[i].id == id) {
return i;
}
}
return -1;
}
// 根据学号删除学生
void deleteStudentById(StudentList *list, int id) {
int index = findStudentById(*list, id);
if (index == -1) {
printf("学生不存在,无法删除!\n");
return;
}
for (int i = index; i < list->length - 1; i++) {
list->students[i] = list->students[i + 1];
}
list->length--;
}
// 显示所有学生
void showAllStudents(StudentList list) {
printf("学号\t姓名\t分数\n");
for (int i = 0; i < list.length; i++) {
printf("%d\t%s\t%d\n", list.students[i].id, list.students[i].name, list.students[i].score);
}
}
int main() {
StudentList list;
initStudentList(&list);
// 添加学生
Student s1 = { 1001, "张三", 90 };
addStudent(&list, s1);
Student s2 = { 1002, "李四", 80 };
addStudent(&list, s2);
Student s3 = { 1003, "王五", 70 };
addStudent(&list, s3);
// 显示所有学生
showAllStudents(list);
// 根据学号删除学生
deleteStudentById(&list, 1002);
// 显示所有学生
showAllStudents(list);
return 0;
}
```
上述代码中,我们定义了一个 `Student` 结构体来表示学生信息,包括学号、姓名和分数。我们还定义了一个 `StudentList` 结构体来表示学生顺序表,包括学生数组和学生数量。在 `initStudentList` 函数中,我们初始化了学生顺序表,将学生数量设为0。在 `addStudent` 函数中,我们向学生顺序表中添加学生,如果学生数量已满,则无法添加。在 `findStudentById` 函数中,我们根据学号查找学生,如果找到了则返回该学生在数组中的下标,否则返回-1。在 `deleteStudentById` 函数中,我们根据学号删除学生,如果学生不存在则无法删除。在 `showAllStudents` 函数中,我们显示所有学生的学号、姓名和分数。在 `main` 函数中,我们使用示例数据添加了三个学生,然后显示所有学生,再删除一个学生后再次显示所有学生。
阅读全文