请编写程序实现顺序表的建立、求长度、插入、删除、遍历的基本运算,其中顺序表中每一个数据元素的类型定义为学生信息的结构体,包括学号、姓名和成绩。
时间: 2024-05-12 17:19:04 浏览: 7
```c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 100
// 学生信息结构体
typedef struct {
int id; // 学号
char name[20]; // 姓名
int score; // 成绩
}Student;
// 顺序表结构体
typedef struct {
Student data[MAXSIZE]; // 数据元素
int length; // 长度
}SqList;
// 初始化顺序表
void InitList(SqList *L){
L->length = 0;
}
// 求顺序表长度
int ListLength(SqList L){
return L.length;
}
// 在顺序表的第i个位置插入元素e
int ListInsert(SqList *L, int i, Student e){
int j;
if(i < 1 || i > L->length + 1){ // 位置不合法
return 0;
}
if(L->length >= MAXSIZE){ // 顺序表已满
return 0;
}
for(j = L->length; j >= i; j--){ // 从后往前移动元素
L->data[j] = L->data[j-1];
}
L->data[i-1] = e; // 插入新元素
L->length++; // 表长加1
return 1;
}
// 删除顺序表的第i个元素,并用e返回其值
int ListDelete(SqList *L, int i, Student *e){
int j;
if(i < 1 || i > L->length){ // 位置不合法
return 0;
}
*e = L->data[i-1]; // 用e返回被删除元素的值
for(j = i; j < L->length; j++){ // 从前往后移动元素
L->data[j-1] = L->data[j];
}
L->length--; // 表长减1
return 1;
}
// 遍历顺序表
void ListTraverse(SqList L){
int i;
for(i = 0; i < L.length; i++){
printf("学号:%d,姓名:%s,成绩:%d\n", L.data[i].id, L.data[i].name, L.data[i].score);
}
}
int main(){
SqList L;
InitList(&L); // 初始化顺序表
int i;
Student e;
for(i = 1; i <= 5; i++){ // 插入5个元素
e.id = i;
sprintf(e.name, "学生%d", i); // 姓名用"学生"+学号表示
e.score = i * 10;
ListInsert(&L, i, e);
}
printf("顺序表的长度为:%d\n", ListLength(L)); // 输出顺序表的长度
printf("遍历顺序表:\n");
ListTraverse(L); // 遍历顺序表
printf("删除第3个元素:\n");
ListDelete(&L, 3, &e); // 删除第3个元素
printf("遍历顺序表:\n");
ListTraverse(L); // 遍历顺序表
return 0;
}
```