用指针应用写一个存储学生成绩的顺序表
时间: 2023-05-24 22:04:18 浏览: 43
以下是用指针应用写一个存储学生成绩的顺序表的示例代码:
```c++
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
struct Student {
int id;
char name[20];
float score;
};
struct SeqList {
Student *data[MAX_SIZE]; // 存储学生信息的数组
int length; // 表示顺序表的长度
};
SeqList* createSeqList() {
SeqList* list = (SeqList*)malloc(sizeof(SeqList));
list->length = 0;
return list;
}
void destroySeqList(SeqList* list) {
for (int i = 0; i < list->length; i++) {
free(list->data[i]); // 释放每个学生信息对应的内存空间
}
free(list);
}
int insert(SeqList* list, Student* student) {
if (list->length >= MAX_SIZE) {
return -1; // 表示插入失败,顺序表已满
}
list->data[list->length++] = student;
return 0; // 表示插入成功
}
int search(SeqList* list, int id) {
for (int i = 0; i < list->length; i++) {
if (list->data[i]->id == id) {
return i; // 返回学生信息在数组中的下标
}
}
return -1; // 表示未找到
}
int remove(SeqList* list, int id) {
int index = search(list, id);
if (index == -1) {
return -1; // 表示移除失败,未找到对应学生信息
}
free(list->data[index]); // 释放对应学生信息对应的内存空间
for (int i = index; i < list->length - 1; i++) {
list->data[i] = list->data[i + 1];
}
list->length--;
return 0; // 表示移除成功
}
void print(SeqList* list) {
for (int i = 0; i < list->length; i++) {
printf("%d\t%s\t%.2f\n", list->data[i]->id, list->data[i]->name, list->data[i]->score);
}
}
int main() {
SeqList* list = createSeqList();
Student* s1 = (Student*)malloc(sizeof(Student));
s1->id = 1;
strcpy(s1->name, "Tom");
s1->score = 90.5;
insert(list, s1);
Student* s2 = (Student*)malloc(sizeof(Student));
s2->id = 2;
strcpy(s2->name, "Jerry");
s2->score = 80.0;
insert(list, s2);
print(list);
remove(list, 1);
print(list);
destroySeqList(list);
return 0;
}
```