编辑代码

#include <stdio.h>
#define MaxLen 100

typedef struct
{
    int no;
    int score;
} DataType;

typedef struct 
{
    DataType data[MaxLen]; // 定义存储表元素的数组
    int length;
}SeqList;

// 顺序表的初始化
void InitList(SeqList *p){
    p->length=0;
}

// 顺序表的创建
void CreateList(SeqList *p){
    int i = 0;
    DataType x;
    printf("请输入学号和成绩,以学号-1为结束:\n");
    scanf("%d", &x.no);
    while(x.no != -1){
        scanf("%d", &x.score);
        p->data[i] = x;
        scanf("%d", &x.no);
        i++;
    }
    p->length = i;
}

// 顺序表中插入元素
void InsertList(SeqList *p, int i, DataType x) {
    for(int j = p->length-1; j > i-1; j--) {
        p->data[j+1] = p->data[j];
    }
    p->data[i-1] = x;
    p->length++;
}

// 按序号获取顺序表中元素
DataType GetNode(SeqList *L, int i) {
    if(i < 1 || i > L->length) printf("position error\n");
    return L->data[i-1];
}

// 在顺序表中查找元素
int LocateList(SeqList *p, int no) {
    int i = 0;
    while(i < p->length && p->data[i].no != no) i++;
    if(i < p->length) return i+1;
    else return -1;
}

// 修改第i个元素
void EditList(SeqList *p, int i, DataType e) {
    if(i < 1 || i > p->length) printf("position error\n");
    p->data[i-1] = e;
}

// 删除第i个元素
void DeleteList(SeqList *L, int i) {
    if(i < 1 || i > L->length) printf("position error\n");
    for(int j = i; j <= L->length-1; j++) 
        // 向前移动元素
        L->data[j-1] = L->data[j];
    L->length--;
}

// 打印顺序表
void PrintList(SeqList *L) {
    int i;
    for(i = 0; i < L->length; i++) {
        printf("[%d,%d]\n",L->data[i].no, L->data[i].score);
    }
    printf("\n");
}
int main () {
    SeqList L;
    DataType e;

    InitList(&L);
    // 创建
    CreateList(&L);
    PrintList(&L);
    // 插入
    e.no = 4;
    e.score = 250;
    InsertList(&L, 4, e);
    printf("修改后:\n");
    PrintList(&L);
    // 查询
    int i = LocateList(&L, 3);
    if(i > 0) printf("学号为3的成绩:%d \n", GetNode(&L, i).score);
    else printf("找不到这个元素呀!!!");
    // 修改
    e.no = 3; 
    e.score = 65;
    int m = LocateList(&L, 3);
    EditList(&L, m, e);
    printf("修改后:\n");
    PrintList(&L);
    // 删除
    int k = LocateList(&L, 2);
    DeleteList(&L, k);
    printf("删除学号为2的记录后:\n");
    PrintList(&L);
}