#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXSIZE 10typedef struct stude

#include
#include
#include

#define MAXSIZE 10

typedef struct student {
    int id;      // 学号
    float score; // 成绩
} Student;

typedef struct node {
    Student data;
    struct node* next;
} Node, *LinkList;

// 初始化链表
void InitList(LinkList* L) {
    *L = NULL;
}

// 用前插法插入从自己学号开始往后数,10位同学
void InsertFront(LinkList* L, int startId, int count) {
    for (int i = 0; i < count; ++i) {
        Node* newNode = (Node*)malloc(sizeof(Node));
        newNode->data.id = startId + i;
        newNode->data.score = (startId + i) % 100; // 假设成绩为学号模100
        newNode->next = *L;
        *L = newNode;
    }
}

// 输出所有链表数据
void ShowList(LinkList L) {
    Node* p = L;
    printf("链表数据:\n");
    while (p != NULL) {
        printf("学号: %d, 成绩: %.2f\n", p->data.id, p->data.score);
        p = p->next;
    }
}

// 查找链表中第i个学生
void GetElem(LinkList L, int i) {
    Node* p = L;
    int j = 0;
    while (p != NULL && j < i) {
        p = p->next;
        ++j;
    }
    if (p == NULL) {
        printf("查找失败,没有第%d个学生\n", i);
    } else {
        printf("学号: %d, 成绩: %.2f\n", p->data.id, p->data.score);
    }
}

// 在第i个元素前插入一个元素
void ListInsert(LinkList* L, int i, int id, float score) {
    Node* p = *L;
    int j = 0;
    while (p != NULL && j < i - 1) {
        p = p->next;
        ++j;
    }
    if (p == NULL) {
        printf("插入失败,没有第%d个学生\n", i);
    } else {
        Node* newNode = (Node*)malloc(sizeof(Node));
        newNode->data.id = id;
        newNode->data.score = score;
        newNode->next = p->next;
        p->next = newNode;
    }
}

// 删除链表中第i个元素
void ListDelete(LinkList* L, int i) {
    Node* p = *L;
    Node* prev = NULL;
    int j = 0;
    while (p != NULL && j < i) {
        prev = p;
        p = p->next;
        ++j;
    }
    if (p == NULL) {
        printf("删除失败,没有第%d个学生\n", i);
    } else {
        prev->next = p->next;
        free(p);
    }
}

// 释放链表中所有结点
void DestroyList(LinkList* L) {
    Node* p = *L;
    while (p != NULL) {
        Node* temp = p;
        p = p->next;
        free(temp);
    }
    *L = NULL;
}

int main() {
    LinkList L;
    InitList(&L);
    InsertFront(&L, 2000, 10);
    ShowList(L);
    GetElem(L, 25);
    ListInsert(&L, 25, 2001, 85.5);
    ShowList(L);
    ListDelete(&L, 30);
    ShowList(L);
    DestroyList(&L);
    return 0;
}

你可能感兴趣的:(c语言)