用正确详细的c语言代码实现:学生表抽象成一个线性表,每个学生(包括姓名、学号、成绩)作为线性表中的一个元素,该线性表采用顺序存储结构,对该线性表进行初始化、创建、输出、插入和删除基本操作,请编写代码实现。
时间: 2024-10-13 07:16:53 浏览: 44
在C语言中,我们可以使用结构体(struct)来表示学生信息,并用数组来实现顺序存储的线性表。下面是一个简单的例子,展示了如何实现学生表的初始化、创建、输出、插入和删除操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义学生结构体
typedef struct {
char name[50];
int id;
float score;
} Student;
// 线性表的定义
#define MAX_STUDENTS 10 // 最大学生数
Student students[MAX_STUDENTS]; // 学生表
// 初始化线性表
void initialize() {
int i;
printf("请输入学生数量:");
scanf("%d", &students[0].id);
for (i = 1; i < MAX_STUDENTS && students[i - 1].id != -1; i++) {
printf("\n请输入第%d个学生的数据:\nName: ", i);
fgets(students[i].name, sizeof(students[i].name), stdin);
students[i].name[strlen(students[i].name) - 1] = '\0'; // 删除行尾的换行符
printf("ID: ");
scanf("%d", &students[i].id);
printf("Score: ");
scanf("%f", &students[i].score);
}
}
// 输出线性表
void display() {
int i;
printf("\n学生列表:\n");
for (i = 0; i < MAX_STUDENTS; i++) {
if (students[i].id != -1) { // 防止访问无效位置
printf("学生 %d: 名称:%s, ID:%d, 成绩:%f\n", i + 1, students[i].name, students[i].id, students[i].score);
}
}
}
// 插入新学生到线性表
void insert(Student new_student) {
if (new_student.id == -1) return; // 如果新学生ID未设置,忽略此操作
int i;
for (i = 0; i < MAX_STUDENTS && students[i].id != -1; i++) {
if (students[i].id > new_student.id) break; // 找到插入位置
}
if (i == MAX_STUDENTS) i--; // 如果已满,插入最后一位
// 将新学生插入到指定位置
memmove(&students[i+1], &students[i], sizeof(Student)*(MAX_STUDENTS-i));
students[i] = new_student;
}
// 删除学生
void delete(int index) {
if (index >= 0 && index < MAX_STUDENTS) {
int j;
for (j = index; j < MAX_STUDENTS - 1; j++) {
students[j] = students[j + 1];
}
students[MAX_STUDENTS - 1].id = -1; // 标记删除的位置为无效
} else {
printf("错误的索引。\n");
}
}
int main() {
initialize();
display();
// 示例:插入和删除操作
Student new_student = {"张三", 1001, 89.5};
insert(new_student);
delete(1); // 删除第二个学生(索引从0开始)
display();
return 0;
}
```
阅读全文