下面是一个C语言程序,用于实现顺序表的基本操作,包括初始化、添加元素、打印列表等功能。程序中使用了结构体和指针来管理动态数组,以存储学生信息。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 定义顺序表最大容量
// 定义学生结构体
typedef struct {
int id; // 学号
float score; // 成绩
} Student;
// 定义顺序表结构体
typedef struct {
Student *data; // 学生数据数组指针
int size; // 当前顺序表大小
int capacity; // 顺序表容量
} SeqList;
// 初始化顺序表
void initList(SeqList *list) {
list->data = (Student*)malloc(MAX_SIZE * sizeof(Student));
if (list->data == NULL) {
printf("Failed to allocate memory.\n");
exit(EXIT_FAILURE);
}
list->size = 0;
list->capacity = MAX_SIZE;
}
// 向顺序表中添加一个学生记录
void addStudent(SeqList *list, Student student) {
if (list->size >= list->capacity) {
printf("The list is full. Cannot add more students.\n");
return;
}
list->data[list->size++] = student;
}
// 打印顺序表中的所有学生记录
void printList(SeqList list) {
for (int i = 0; i < list.size; ++i) {
printf("学号: %d, 成绩: %.2f\n", list.data[i].id, list.data[i].score);
}
}
int main() {
// 定义一个顺序表变量
SeqList list;
initList(&list);
// 向顺序表中添加三个学生记录
Student student1 = {100001, 85.5};
Student student2 = {100002, 91.0};
Student student3 = {100003, 78.0};
addStudent(&list, student1);
addStudent(&list, student2);
addStudent(&list, student3);
// 输出顺序表中所有数据元素的信息
printf("所有学生记录如下:\n");
printList(list);
// 释放顺序表内存
free(list.data);
return 0;
}
```
这个程序中定义了两个结构体类型:`Student` 和 `SeqList`。`Student` 结构体表示单个学生的信息,包含学号和成绩;`SeqList` 结构体表示顺序表,包含指向学生数据数组的指针、顺序表大小和顺序表容量。
`initList` 函数用于初始化顺序表,`addStudent` 函数用于向顺序表中添加学生记录,`printList` 函数用于打印顺序表中的所有学生记录。
在 `main` 函数中,我们首先初始化顺序表,然后向顺序表中添加三个学生记录,最后打印顺序表中的所有学生记录。最后,我们释放了顺序表的内存。