当前位置:实例文章 » JAVA Web实例» [文章]动态内存分配(2)——经典例题的讲解

动态内存分配(2)——经典例题的讲解

发布人:shili8 发布时间:2024-12-24 08:20 阅读次数:0

**动态内存分配(2)——经典例题的讲解**

在前一篇文章中,我们讨论了动态内存分配的基本概念和原理。今天,我们将继续讨论这个主题,并通过一个经典的例题来演示如何使用动态内存分配。

**例题:学生信息管理系统**

假设我们要开发一个学生信息管理系统,需要能够添加、删除和修改学生信息。每个学生都有一个唯一的学号,姓名、年龄和成绩等信息。

为了实现这个功能,我们需要能够动态地分配内存来存储学生信息。下面是使用 C语言编写的例子代码:

c#include <stdio.h>
#include <stdlib.h>

// 定义学生结构体typedef struct {
 int id; // 学号 char name[20]; // 姓名 int age; // 年龄 float score; // 成绩} Student;

// 函数声明void addStudent(Student **students, int *numStudents);
void deleteStudent(Student **students, int *numStudents, int id);
void modifyStudent(Student **students, int *numStudents, int id);

int main() {
 int numStudents =0; // 当前学生数量 Student *students = NULL; // 学生信息数组 addStudent(&students, &numStudents); // 添加第一个学生 printf("添加成功!
");

 deleteStudent(&students, &numStudents,1); // 删除第一个学生 printf("删除成功!
");

 modifyStudent(&students, &numStudents,2); // 修改第二个学生的信息 printf("修改成功!
");

 return0;
}

// 添加学生函数void addStudent(Student **students, int *numStudents) {
 Student *newStudent = (Student *)malloc(sizeof(Student)); // 动态分配内存 if (newStudent == NULL) {
 printf("内存分配失败!
");
 return;
 }

 newStudent->id =1; // 学号 strcpy(newStudent->name, "张三"); // 姓名 newStudent->age =20; // 年龄 newStudent->score =90.0f; // 成绩 if (*numStudents ==0) {
 *students = newStudent;
 } else {
 Student *temp = *students;

 while (temp->next != NULL) {
 temp = temp->next;
 }

 temp->next = newStudent;
 }

 (*numStudents)++;
}

// 删除学生函数void deleteStudent(Student **students, int *numStudents, int id) {
 if (*numStudents ==0) {
 printf("没有学生!
");
 return;
 }

 Student *temp = *students;

 while (temp != NULL && temp->id != id) {
 temp = temp->next;
 }

 if (temp == NULL) {
 printf("找不到学生!
");
 return;
 }

 if (temp == *students) {
 *students = temp->next;
 } else {
 Student *prev = *students;

 while (prev->next != temp) {
 prev = prev->next;
 }

 prev->next = temp->next;
 }

 free(temp); //释放内存 (*numStudents)--;

 printf("删除成功!
");
}

// 修改学生函数void modifyStudent(Student **students, int *numStudents, int id) {
 if (*numStudents ==0) {
 printf("没有学生!
");
 return;
 }

 Student *temp = *students;

 while (temp != NULL && temp->id != id) {
 temp = temp->next;
 }

 if (temp == NULL) {
 printf("找不到学生!
");
 return;
 }

 // 修改学生信息 strcpy(temp->name, "李四"); // 姓名 temp->age =25; // 年龄 printf("修改成功!
");
}

在这个例子中,我们定义了一个 `Student` 结构体来存储学生的信息。我们使用动态内存分配函数 `malloc()` 来分配内存来存储每个学生的信息。

当添加、删除或修改学生时,我们会根据需要重新分配内存来更新学生信息。

**注意**:在这个例子中,我们使用了一个链式结构来存储学生信息。每个学生都有一个 `next` 指针指向下一个学生。这使得我们可以方便地添加、删除和修改学生信息。

**总结**

通过这个经典的例题,我们演示了如何使用动态内存分配来实现学生信息管理系统。在这个例子中,我们定义了一个 `Student` 结构体来存储学生的信息,并使用动态内存分配函数 `malloc()` 来分配内存来存储每个学生的信息。

我们还演示了如何添加、删除和修改学生信息,包括重新分配内存来更新学生信息。

其他信息

其他资源

Top