利用线性链表实现学生通信录管理系统

时间: 2023-07-11 16:07:21 浏览: 70
学生通信录管理系统可以通过使用线性链表来实现。下面是一些基本操作: 1. 定义结构体 首先,我们需要定义一个结构体表示学生通信录中的每个记录,包括学生姓名、学号、联系电话等信息。 ```c typedef struct student { char name[20]; char id[10]; char phone[20]; struct student *next; } Student; ``` 2. 创建链表 然后,我们可以创建一个头指针指向链表的头节点,用于存储所有学生的信息。 ```c Student *head = NULL; ``` 3. 插入节点 当用户需要添加新的学生信息时,我们可以通过以下代码将信息插入到链表中。 ```c void insert(Student **head_ref, char name[], char id[], char phone[]) { // 创建新节点 Student *new_node = (Student*)malloc(sizeof(Student)); strcpy(new_node->name, name); strcpy(new_node->id, id); strcpy(new_node->phone, phone); new_node->next = NULL; // 如果链表为空,则将新节点作为头节点 if (*head_ref == NULL) { *head_ref = new_node; return; } // 找到链表的最后一个节点并将新节点插入到末尾 Student *last_node = *head_ref; while (last_node->next != NULL) { last_node = last_node->next; } last_node->next = new_node; } ``` 4. 删除节点 如果用户需要删除某个学生信息,我们可以通过以下代码从链表中删除该节点。 ```c void delete_student(Student **head_ref, char id[]) { // 如果链表为空,直接返回 if (*head_ref == NULL) { return; } // 如果第一个节点就是要删除的节点 if (strcmp((*head_ref)->id, id) == 0) { Student *temp = *head_ref; *head_ref = (*head_ref)->next; free(temp); return; } // 在链表中查找要删除的节点并删除 Student *prev_node = *head_ref; Student *cur_node = prev_node->next; while (cur_node != NULL && strcmp(cur_node->id, id) != 0) { prev_node = cur_node; cur_node = cur_node->next; } if (cur_node != NULL) { prev_node->next = cur_node->next; free(cur_node); } } ``` 5. 修改节点 如果用户需要修改某个学生的信息,我们可以通过以下代码找到该节点并修改其信息。 ```c void modify_student(Student *head, char id[], char new_phone[]) { // 在链表中查找要修改的节点并修改 Student *cur_node = head; while (cur_node != NULL && strcmp(cur_node->id, id) != 0) { cur_node = cur_node->next; } if (cur_node != NULL) { strcpy(cur_node->phone, new_phone); } } ``` 6. 查找节点 最后,如果用户需要查找某个学生的信息,我们可以通过以下代码在链表中查找该节点。 ```c void search_student(Student *head, char id[]) { // 在链表中查找要查找的节点并输出其信息 Student *cur_node = head; while (cur_node != NULL && strcmp(cur_node->id, id) != 0) { cur_node = cur_node->next; } if (cur_node != NULL) { printf("Name: %s\n", cur_node->name); printf("ID: %s\n", cur_node->id); printf("Phone: %s\n", cur_node->phone); } else { printf("Student not found.\n"); } } ``` 这样,我们就可以利用线性链表实现学生通信录管理系统了。

相关推荐

最新推荐

recommend-type

基于RFID的智能仓储管理系统的设计与实现

传统的仓储管理系统使用的是人工记录单据的方式,这种方式不但费时...通过管理系统与RFID技术的结合,实现了对货物进行出库入库,货物浏览,人员管理,单品搜索等功能。从而完成了对商品的分类管理,提高了仓储能力。
recommend-type

数据库课程设计 学生宿舍管理系统

宿舍管理系统,课程设计 本系统的最终用户为宿舍楼管理员,本宿舍楼的学生。根据我们日常生活中的经验,结合对自己学校宿舍楼管理老师的咨询和对同宿舍楼同学的调查,得出用户的下列实际要求:本宿舍楼的学生能查询...
recommend-type

数据机构C语言用双向循环链表实现通讯簿

利用双向循环链表作为储存结构设计并实现一个通讯录程序。可以实现信息的添加、插入、删除、查询和统计等功能 1.2 课程设计要求 (1) 每条信息至少包含:姓名(name)、街道(street)、城市(city)、邮编、(eip...
recommend-type

基于RFID技术的学生考勤系统设计

随着电子信息技术的发展,智能卡在生活中随处可见。而射频识别卡正逐渐取代传统的接触式IC卡,成为智能卡领域的新潮流。...学生考勤系统设计利用无线射频识别(RFID)技术,实现对学生进行考勤、记录等功能。
recommend-type

基于SpringBoot框架仿stackOverflow网站后台开发.zip

基于springboot的java毕业&课程设计
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SQL怎么实现 数据透视表

SQL可以通过使用聚合函数和GROUP BY子句来实现数据透视表。 例如,假设有一个销售记录表,其中包含产品名称、销售日期、销售数量和销售额等信息。要创建一个按照产品名称、销售日期和销售额进行汇总的数据透视表,可以使用以下SQL语句: ``` SELECT ProductName, SaleDate, SUM(SaleQuantity) AS TotalQuantity, SUM(SaleAmount) AS TotalAmount FROM Sales GROUP BY ProductName, SaleDate; ``` 该语句将Sales表按照ProductName和SaleDat
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。