C语言使用链表实现学生籍贯管理系统

C语言使用链表实现学生籍贯管理系统攻略

本文将详细讲解如何使用C语言实现学生籍贯管理系统的链表数据结构,包括链表的定义、创建、插入、删除和遍历等基本操作。

一、链表的定义

链表是一种动态数据结构,由若干个节点通过指针链接而成。链表中的每个节点(除了最后一个节点)都有一个指向下一个节点的指针,最后一个节点的指针指向NULL。

在C语言中,链表的节点可以使用结构体来实现。例如,下面是一个定义学生籍贯的节点的结构体:

typedef struct student{
    char name[20];          // 学生姓名
    int age;                // 学生年龄
    char hometown[20];      // 学生籍贯
    struct student *next;   // 指向下一个节点的指针
}studentNode;

在这个结构体中,除了姓名、年龄和籍贯等数据之外,还有一个指向下一个节点的指针。

二、链表的创建和插入节点

创建链表,需要先定义链表的头节点,然后通过指针不断链接新的节点。例如,下面是一个创建链表并插入节点的函数:

studentNode *create_student_list(){
    studentNode *head,*tail,*p_new;
    head=tail=NULL;
    char name[20],hometown[20];
    int age;
    printf("请输入学生信息(姓名 年龄 籍贯),以0 0 0结束:");
    while(1){
        scanf("%s%d%s",name,&age,hometown);
        if (strcmp(name,"0")==0 && age==0 && strcmp(hometown,"0")==0) break;

        p_new=(studentNode *)malloc(sizeof(studentNode));
        strcpy(p_new->name,name);
        p_new->age=age;
        strcpy(p_new->hometown,hometown);

        if (head==NULL){
            head=p_new;
            tail=p_new;
        }else{
            tail->next=p_new;
            tail=p_new;
        }
    }
    if (head==NULL) return NULL;
    tail->next=NULL;
    return head;
}

在这个函数中,首先定义了头节点、尾节点和新节点三个指针,然后通过输入参数和动态内存分配的方式,创建一个新的节点并将其插入链表中。

三、链表的遍历和删除节点

遍历链表,可以利用循环的方式通过指针不断向后遍历,直至节点指针为NULL。例如,下面是一个遍历链表并输出学生信息的函数:

void display_student_list(studentNode *list){
    studentNode *p=list;
    printf("学生信息如下:\n");
    while (p){
        printf("%s\t%d\t%s\n",p->name,p->age,p->hometown);
        p=p->next;
    }
}

在这个函数中,通过循环的方式遍历链表,逐一输出学生的姓名、年龄和籍贯等信息。

删除链表的节点,可以先找到要删除的节点,然后将其上一个节点的next指针指向其下一个节点即可。例如,下面是一个删除链表中指定学生信息的函数:

int delete_student_node(studentNode **list,char* name,int age,char* hometown){
    studentNode *p=(*list),*q=NULL;
    while (p){
        if (strcmp(p->name,name)==0 && p->age==age && strcmp(p->hometown,hometown)==0){
            if (p==(*list)){
                *list=p->next;
            }else{
                q->next=p->next;
            }
            free(p);
            return 1;
        }
        q=p;
        p=p->next;
    }
    return 0;
}

在这个函数中,通过循环的方式遍历链表,查找要删除的学生信息。如果找到该学生,则将其从链表中删除,否则返回0。

四、示例说明

示例1:创建链表并输出学生信息

studentNode *list=create_student_list();
display_student_list(list);

在这个示例中,先通过create_student_list函数创建一个链表并插入若干个学生的信息,然后通过display_student_list函数遍历链表并输出学生信息。

示例2:删除链表中指定学生信息

delete_student_node(&list,"张三",20,"北京");

在这个示例中,首先定义一个链表list并插入若干个学生的信息,然后调用delete_student_node函数删除姓名为"张三"、年龄为20、籍贯为"北京"的学生信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言使用链表实现学生籍贯管理系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Marshall Monitor II A.N.C.降噪蓝牙耳机30天详细评测

    Marshall Monitor II A.N.C.降噪蓝牙耳机30天详细评测 概述 本文介绍Marshall Monitor II A.N.C.降噪蓝牙耳机的使用体验,并根据30天的长时间使用给出评测。 外观设计 Marshall Monitor II A.N.C.耳机采用了传统的翻盖式设计,整个耳机以黑色为主色调,搭配铜色的镀金LOGO,非常时尚。耳机外…

    C 2023年5月22日
    00
  • 详解C++中的自动存储

    标题:详解C++中的自动存储 自动存储是 C++ 中的一个关键概念,它是指当程序进入一个特定的代码块时,在该块内声明的变量会自动被创建并分配存储空间,当程序退出该块时,这些变量也会自动被销毁并释放空间。这种存储方式在 C++ 中被广泛使用,也是 C++ 中最基本的存储类型之一。 自动存储的特点 自动存储是默认的存储类型。 自动存储的变量只在其所在作用域内可见…

    C 2023年5月23日
    00
  • C 语言基础教程(我的C之旅开始了)[二]

    C 语言基础教程(我的C之旅开始了)[二]攻略 1. 基本数据类型 文章中提到了 C 语言的基本数据类型,包括了整型、浮点型、字符型和指针型。其中整型可以分为有符号和无符号两种,我们可以通过给数据类型指定修饰符来定义它是有符号还是无符号的。 此外,C 语言还有一个关键字 typedef,它可以为现有的数据类型创建一个新的别名。比如我们可以给 unsigned…

    C 2023年5月23日
    00
  • C++ Primer Plus 第四章之C++ Primer Plus复合类型学习笔记

    C++ Primer Plus 第四章之C++ Primer Plus复合类型学习笔记 1. 复合类型简介 在C++中有许多复合类型,如数组、结构体、共用体和指针等,它们能够将多个基本类型变量组合成更加复杂的数据结构。在使用复合类型时,需要注意其内存结构和使用方法,以充分发挥其特性。 2. 数组 数组是一种复合类型,可以存储多个同一类型的数据,通过下标访问数…

    C 2023年5月22日
    00
  • C++处理图存储的方式分享

    C++处理图存储的方式分享 在C++中处理图的存储方式有多种,这里主要讲解三种最常见和实用的方式:邻接矩阵、邻接表和关联数组。 邻接矩阵 邻接矩阵是图最简单、使用最广泛的存储方式之一,它使用一个二维矩阵表示节点之间的关系。当图中有 n 个节点时,可以用一个 n x n 的矩阵来存储它们之间的关系,矩阵中的每个元素存储两个节点之间的边的信息,如边的权重。 以下…

    C 2023年5月23日
    00
  • 分享一下8年C++面向对象设计的经验体会

    下面是我分享关于“分享一下8年C++面向对象设计的经验体会”的完整攻略: 1. 熟悉C++语言基础和面向对象编程概念 要想掌握好C++面向对象设计,首先需要对C++语言基础和面向对象编程概念有充分的认识和熟练掌握。这包括了C++语言基本语法、指针、引用、构造与析构函数、继承、多态和模板等。只有对C++语言有深入的了解,才能保证在面向对象设计时能更加灵活地运用…

    C 2023年5月22日
    00
  • C语言中的状态机设计深入讲解

    C语言中的状态机设计深入讲解 什么是状态机 状态机(State Machine),也称状态自动机,是一种抽象的数学模型,是一种对事物变化过程进行描述的工具。状态机可分为两类:有限状态机和无限状态机。 有限状态机(FSM, Finite State Machine)是一种计算模型。有限状态机由有限个状态及在这些状态之间的转移和动作组成,其中一个状态是我们所关心…

    C 2023年5月22日
    00
  • C语言基于回溯算法解决八皇后问题的方法

    C语言基于回溯算法解决八皇后问题的方法 什么是八皇后问题? 八皇后问题是一个经典的、古老的问题,它的目标是在一个8×8的棋盘上放置8个皇后,使得每个皇后都无法互相攻击,即两个皇后不能在同一行、同一列或同一对角线上。 回溯算法解决八皇后问题 回溯算法(Backtracking Algorithm),又称试探法,是一种系统地搜索问题的解的算法。它的基本思想是从问…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部