用线性表及其顺序存储结构的知识来用C语言来编写程序使得使用顺序表编写学生名册管理程序,名册中的每条记录包括学号和姓名。程序要实现的功能为: 实现学生信息的录入。添加的学生人数由键盘输入给定。 在指定位置删除某学生的数据。 在指定位置插入某学生的数据。 输出顺序表中所有的数据。
时间: 2024-09-19 10:03:40 浏览: 40
用C语言描述顺序表-第二章 线性表-顺序表
为了使用C语言实现顺序表的学生名册管理,我们可以创建一个简单的结构体表示学生的信息,然后定义一个动态数组作为顺序表来存储这些数据。这里是一个基本的实现步骤:
首先,创建一个包含学号和姓名的结构体:
```c
typedef struct {
int student_id; // 学号
char name[50]; // 姓名
} Student;
```
接着,定义顺序表的数据结构和操作函数:
```c
#include <stdio.h>
#include <stdlib.h>
// 动态数组作为顺序表
typedef struct {
Student* data; // 指向学生数据的指针
int size; // 当前元素的数量
int capacity; // 数组的容量
} SeqList;
// 初始化顺序表
SeqList* init_list() {
SeqList* list = (SeqList*)malloc(sizeof(SeqList));
list->data = NULL;
list->size = 0;
list->capacity = 5; // 初始容量设为5
return list;
}
// 插入学生到列表尾部
void insert(SeqList* list, const Student* new_student) {
if (list->size == list->capacity) {
list->capacity *= 2; // 如果已满,扩大容量
list->data = (Student*)realloc(list->data, sizeof(Student) * list->capacity);
}
list->data[list->size] = *new_student;
list->size++;
}
// 删除指定位置的学生
void delete(SeqList* list, int position) {
if (position >= 0 && position < list->size) {
memmove(&list->data[position], &list->data[position+1], sizeof(Student)*(list->size - position - 1));
list->size--;
} else {
printf("Invalid position.\n");
}
}
// 在指定位置插入学生
void insert_at(SeqList* list, int position, const Student* new_student) {
if (position >= 0 && position <= list->size) {
if (list->size == list->capacity) {
expand_capacity(list);
}
for (int i = list->size; i > position; i--) {
list->data[i] = list->data[i-1];
}
list->data[position] = *new_student;
} else {
printf("Invalid position.\n");
}
}
// 打印所有学生信息
void print_list(SeqList* list) {
for (int i = 0; i < list->size; i++) {
printf("学号:%d 姓名:%s\n", list->data[i].student_id, list->data[i].name);
}
}
// 扩大容量
void expand_capacity(SeqList* list) {
list->capacity *= 2;
list->data = (Student*)realloc(list->data, sizeof(Student) * list->capacity);
}
// 主函数示例
int main() {
SeqList* students = init_list();
// 用户输入和操作
int action, choice;
while (true) {
printf("\n选择操作:\n1. 添加学生\n2. 删除学生\n3. 插入学生\n4. 显示所有学生\n5. 退出\n");
scanf("%d", &action);
switch (action) {
case 1:
Student new_student;
printf("请输入学号和姓名:\n");
scanf("%d %s", &new_student.student_id, new_student.name);
insert(students, &new_student);
break;
case 2:
printf("请输入删除位置:\n");
scanf("%d", &choice);
delete(students, choice - 1); // 从0开始计数
break;
case 3:
printf("请输入插入位置和学号、姓名:\n");
scanf("%d %d %s", &choice, &new_student.student_id, new_student.name);
insert_at(students, choice - 1, &new_student);
break;
case 4:
print_list(students);
break;
case 5:
free(students->data);
students->data = NULL;
students->size = 0;
students->capacity = 0;
return 0;
default:
printf("无效的选择。\n");
}
}
return 0;
}
```
这个程序实现了学生信息的录入、添加、删除和显示功能。用户可以按照提示进行操作,直到选择退出。
阅读全文