用顺序表存取学生信息
时间: 2024-06-13 07:06:28 浏览: 117
顺序表是一种线性表,它的元素在内存中是连续存储的。在存储学生信息时,可以使用结构体来定义学生信息的数据类型,然后将结构体数组作为顺序表的元素存储。以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 20
// 定义学生信息结构体
typedef struct {
char no[10]; // 学号
char name[20]; // 姓名
int score; // 成绩
} Student;
// 定义顺序表结构体
typedef struct {
Student elem[MAX_SIZE]; // 存储学生信息的数组
int length; // 当前存储的学生信息数量
} SeqList;
// 初始化顺序表
void init(SeqList *L) {
L->length = 0;
}
// 插入学生信息
int insert(SeqList *L, Student s) {
if (L->length >= MAX_SIZE) {
return 0; // 顺序表已满,插入失败
}
int i;
for (i = L->length - 1; i >= 0 && strcmp(L->elem[i].no, s.no) > 0; i--) {
L->elem[i + 1] = L->elem[i]; // 将比插入学生信息学号大的学生信息后移
}
L->elem[i + 1] = s; // 插入学生信息
L->length++; // 学生信息数量加1
return 1; // 插入成功
}
// 按学号查找学生信息
int search(SeqList L, char no[], Student *s) {
int i;
for (i = 0; i < L.length; i++) {
if (strcmp(L.elem[i].no, no) == 0) {
*s = L.elem[i]; // 找到学生信息,将其赋值给s
return 1; // 查找成功
}
}
return 0; // 未找到学生信息,查找失败
}
// 按成绩查找学生信息
void searchByScore(SeqList L, int score) {
int i;
for (i = 0; i < L.length; i++) {
if (L.elem[i].score >= score) {
printf("学号:%s 姓名:%s 成绩:%d\n", L.elem[i].no, L.elem[i].name, L.elem[i].score);
}
}
}
int main() {
SeqList L;
init(&L); // 初始化顺序表
Student s1 = {"001", "张三", 80};
Student s2 = {"002", "李四", 90};
Student s3 = {"003", "王五", 85};
insert(&L, s1); // 插入学生信息
insert(&L, s2);
insert(&L, s3);
Student s;
if (search(L, "002", &s)) { // 按学号查找学生信息
printf("学号:%s 姓名:%s 成绩:%d\n", s.no, s.name, s.score);
}
searchByScore(L, 85); // 按成绩查找学生信息
return 0;
}
```
阅读全文