用c语言实现:学生表抽象成一个线性表,每个学生(包括姓名、学号、成绩)作为线性表中的一个元素,该线性表采用顺序存储结构,对该线性表进行初始化、创建、输出、插入和删除基本操作,请编写代码实现。
时间: 2024-10-13 21:16:45 浏览: 53
在C语言中,我们可以创建一个简单的线性表来表示学生信息,其中包含姓名、学号和成绩。首先,我们需要定义一个结构体来存储学生信息,并实现顺序表的数据结构。以下是代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct {
char name[50];
int id;
float score;
} Student;
// 顺序表的定义
typedef struct {
Student* data; // 数据指针
int size; // 当前元素个数
int capacity; // 初始容量
} List;
// 初始化顺序表
void init_list(List* list) {
list->data = NULL;
list->size = 0;
list->capacity = 5; // 默认容量为5
}
// 添加学生到列表
void add_student(List* list, const char* name, int id, float score) {
if (list->size == list->capacity) {
list->capacity *= 2; // 需要扩容
list->data = realloc(list->data, sizeof(Student) * list->capacity);
}
Student* new_student = &list->data[list->size];
strcpy(new_student->name, name);
new_student->id = id;
new_student->score = score;
list->size++;
}
// 输出学生信息
void print_students(const List* list) {
for (int i = 0; i < list->size; i++) {
printf("学生 %d:\n姓名: %s\n学号: %d\n成绩: %.2f\n", i+1, list->data[i].name, list->data[i].id, list->data[i].score);
}
}
// 在指定位置插入学生
void insert_student(List* list, int pos, const char* name, int id, float score) {
if (pos < 0 || pos > list->size) {
printf("插入位置错误!\n");
return;
}
if (list->size == list->capacity) {
list->capacity *= 2; // 扩容
list->data = realloc(list->data, sizeof(Student) * list->capacity);
}
memmove(&list->data[pos+1], &list->data[pos], (list->size - pos) * sizeof(Student));
Student* new_student = &list->data[pos];
strcpy(new_student->name, name);
new_student->id = id;
new_student->score = score;
list->size++;
}
// 删除指定位置的学生
void delete_student(List* list, int pos) {
if (pos < 0 || pos >= list->size) {
printf("删除位置错误!\n");
return;
}
memmove(&list->data[pos], &list->data[pos+1], (list->size - pos - 1) * sizeof(Student));
list->size--;
if (list->size > 0 && list->size * 2 > list->capacity)
list->capacity /= 2;
else
free(list->data); // 如果列表为空,释放内存
}
int main() {
List student_list;
init_list(&student_list);
// 示例添加和删除操作
add_student(&student_list, "张三", 1001, 88.5);
add_student(&student_list, "李四", 1002, 92.0);
insert_student(&student_list, 1, "王五", 1003, 97.3); // 插入到第1位
delete_student(&student_list, 1); // 删除第1位
print_students(&student_list);
return 0;
}
```
这个代码实现了对学生的顺序表进行初始化、创建、输出、插入和删除的基本操作。注意,在实际应用中,可能会需要更完善的错误检查和边界条件处理。
阅读全文