实验:数据结构(结构体在单链表中的增删改查)

简介: 实验:数据结构(结构体在单链表中的增删改查)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 学生信息结构体
struct Student {
    char name[50];
    char gender[10];
    int student_number;
    char hobbies[100];
    struct Student* next;
};

// 初始化一个空表
struct Student* initialize() {
    return NULL;
}

// 后插法插入学生信息
struct Student* insert(struct Student* head, char name[], char gender[], int student_number, char hobbies[]) {
    struct Student* new_student = (struct Student*)malloc(sizeof(struct Student));
    strcpy(new_student->name, name);
    strcpy(new_student->gender, gender);
    new_student->student_number = student_number;
    strcpy(new_student->hobbies, hobbies);
    new_student->next = NULL;

    if (head == NULL) {
        return new_student;
    }

    struct Student* current = head;
    while (current->next != NULL) {
        current = current->next;
    }
    current->next = new_student;
    return head;
}

// 根据学号对链表节点进行排序
struct Student* sort_by_student_number(struct Student* head) {
    // 使用冒泡排序
    int swapped;
    struct Student* ptr1;
    struct Student* lptr = NULL;

    if (head == NULL) {
        return NULL;
    }

    do {
        swapped = 0;
        ptr1 = head;

        while (ptr1->next != lptr) {
            if (ptr1->student_number > ptr1->next->student_number) {
                // 交换节点
                struct Student* temp = ptr1;
                ptr1 = ptr1->next;
                ptr1->next = temp;
                swapped = 1;
            }
            ptr1 = ptr1->next;
        }
        lptr = ptr1;
    } while (swapped);

    return head;
}

// 根据姓名或学号顺序插入新创建的学生信息
struct Student* insert_sorted(struct Student* head, char name[], char gender[], int student_number, char hobbies[]) {
    struct Student* new_student = (struct Student*)malloc(sizeof(struct Student));
    strcpy(new_student->name, name);
    strcpy(new_student->gender, gender);
    new_student->student_number = student_number;
    strcpy(new_student->hobbies, hobbies);
    new_student->next = NULL;

    if (head == NULL || student_number < head->student_number) {
        new_student->next = head;
        return new_student;
    }

    struct Student* current = head;
    while (current->next != NULL && current->next->student_number < student_number) {
        current = current->next;
    }
    new_student->next = current->next;
    current->next = new_student;
    return head;
}

// 根据学号删除学生信息
struct Student* delete_by_student_number(struct Student* head, int student_number) {
    if (head == NULL) {
        return NULL;
    }

    if (head->student_number == student_number) {
        struct Student* temp = head;
        head = head->next;
        free(temp);
        return head;
    }

    struct Student* current = head;
    while (current->next != NULL && current->next->student_number != student_number) {
        current = current->next;
    }

    if (current->next != NULL) {
        struct Student* temp = current->next;
        current->next = current->next->next;
        free(temp);
    }

    return head;
}

// 打印所有学生信息
void print_students(struct Student* head) {
    struct Student* current = head;
    while (current != NULL) {
        printf("姓名:%s,性别:%s,学号:%d,兴趣爱好:%s\n", current->name, current->gender, current->student_number, current->hobbies);
        current = current->next;
    }
}

int main() {
    struct Student* head = initialize();

    // 示例:插入学生信息
    head = insert(head, "张三", "男", 1001, "篮球");
    head = insert(head, "李四", "女", 1002, "音乐");
    // ... 插入更多学生信息

    // 排序
    head = sort_by_student_number(head);

    // 插入新学生信息
    head = insert_sorted(head, "王五", "男", 1003, "游泳");

    // 打印所有学生信息
    print_students(head);

    // 其他操作...

    return 0;
}
相关文章
|
9天前
|
存储 算法 数据挖掘
数据结构实验||约瑟夫环
数据结构实验||约瑟夫环
|
9天前
|
存储 算法 数据安全/隐私保护
【Python学习篇】Python实验小练习——高级数据结构(五)
【Python学习篇】Python实验小练习——高级数据结构(五)
25 1
|
10天前
|
存储 缓存 算法
数据结构和算法学习记录——总结顺序表和链表(双向带头循环链表)的优缺点、CPU高速缓存命中率
数据结构和算法学习记录——总结顺序表和链表(双向带头循环链表)的优缺点、CPU高速缓存命中率
13 0
|
2天前
数据结构 链表(第7、8天)
数据结构 链表(第7、8天)
|
2天前
|
存储
数据结构——带头双向循环链表
数据结构——带头双向循环链表
|
5天前
|
存储
初阶数据结构 带头双链表
初阶数据结构 带头双链表
7 0
|
5天前
数据结构初阶 链表的补充
数据结构初阶 链表的补充
7 0
|
5天前
|
存储
数据结构初阶 链表详解
数据结构初阶 链表详解
7 0
|
10天前
|
存储 算法
数据结构和算法学习记录——二叉树的存储结构&二叉树的递归遍历(顺序存储结构、链表存储结构、先序中序后序递归遍历)
数据结构和算法学习记录——二叉树的存储结构&二叉树的递归遍历(顺序存储结构、链表存储结构、先序中序后序递归遍历)
9 0
数据结构和算法学习记录——二叉树的存储结构&二叉树的递归遍历(顺序存储结构、链表存储结构、先序中序后序递归遍历)
|
10天前
|
存储 算法
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
8 0