定义学生结构体struct Student类型如下: char id[10]; //学号 char Name[20];//姓名 double Score[3];//3门课程成绩 在主函数定义3个struct Student类型变量,并赋值,将3个变量插入到单链表的表头、表尾和指定位置用,输入一个学号,在单链表上查找该学号的结点,找到,则删除该结点,找不到,则给出提示。C语言编写

时间: 2024-03-25 14:36:32 浏览: 11
以下是C语言代码实现: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义学生结构体 struct Student { char id[10]; //学号 char Name[20];//姓名 double Score[3];//3门课程成绩 struct Student *next; //指向下一个节点的指针 }; // 创建新节点 struct Student *create_new_node(char id[], char Name[], double Score[]) { struct Student *new_node = (struct Student*)malloc(sizeof(struct Student)); strcpy(new_node->id, id); strcpy(new_node->Name, Name); for (int i = 0; i < 3; i++) { new_node->Score[i] = Score[i]; } new_node->next = NULL; return new_node; } // 将新节点插入到单链表的表头 struct Student *insert_to_head(struct Student *head, struct Student *new_node) { new_node->next = head; head = new_node; return head; } // 将新节点插入到单链表的表尾 struct Student *insert_to_tail(struct Student *head, struct Student *new_node) { if (head == NULL) { head = new_node; } else { struct Student *p = head; while (p->next != NULL) { p = p->next; } p->next = new_node; } return head; } // 将新节点插入到单链表的指定位置 struct Student *insert_to_pos(struct Student *head, struct Student *new_node, int pos) { if (pos == 1) { new_node->next = head; head = new_node; } else { struct Student *p = head; int i = 1; while (p != NULL && i < pos - 1) { p = p->next; i++; } if (p == NULL) { printf("插入位置无效\n"); } else { new_node->next = p->next; p->next = new_node; } } return head; } // 在单链表上查找指定学号的结点,并删除该结点 struct Student *delete_by_id(struct Student *head, char id[]) { struct Student *p = head; struct Student *prev = NULL; while (p != NULL && strcmp(p->id, id) != 0) { prev = p; p = p->next; } if (p == NULL) { printf("未找到该学号的学生\n"); } else { if (prev == NULL) { //要删除的节点是头结点 head = p->next; } else { prev->next = p->next; } free(p); printf("删除成功\n"); } return head; } int main() { // 定义3个struct Student类型变量,并赋值 struct Student s1 = {"001", "张三", {85.5, 90, 88.5}, NULL}; struct Student s2 = {"002", "李四", {90, 92, 87}, NULL}; struct Student s3 = {"003", "王五", {91.5, 87, 89.5}, NULL}; // 将3个变量插入到单链表的表头、表尾和指定位置 struct Student *head = NULL; head = insert_to_head(head, &s1); head = insert_to_tail(head, &s2); head = insert_to_pos(head, &s3, 2); // 打印单链表所有节点 struct Student *p = head; while (p != NULL) { printf("学号:%s,姓名:%s,成绩:%lf %lf %lf\n", p->id, p->Name, p->Score[0], p->Score[1], p->Score[2]); p = p->next; } // 输入一个学号,在单链表上查找该学号的结点,找到,则删除该结点,找不到,则给出提示。 char id[10]; printf("请输入要删除的学号:"); scanf("%s", id); head = delete_by_id(head, id); // 打印删除节点后的单链表所有节点 p = head; while (p != NULL) { printf("学号:%s,姓名:%s,成绩:%lf %lf %lf\n", p->id, p->Name, p->Score[0], p->Score[1], p->Score[2]); p = p->next; } return 0; } ```

相关推荐

最新推荐

recommend-type

Java swing + socket + mysql 五子棋网络对战游戏FiveChess.zip

五子棋游戏想必大家都非常熟悉,游戏规则十分简单。游戏开始后,玩家在游戏设置中选择人机对战,则系统执黑棋,玩家自己执白棋。双方轮流下一棋,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【技术】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
recommend-type

纯C语言实现的控制台有禁手五子棋(带AI)Five-to-five-Renju.zip

五子棋游戏想必大家都非常熟悉,游戏规则十分简单。游戏开始后,玩家在游戏设置中选择人机对战,则系统执黑棋,玩家自己执白棋。双方轮流下一棋,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【技术】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
recommend-type

setuptools-57.1.0.tar.gz

Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

setuptools-59.1.1.tar.gz

Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

空载损耗计算软件.zip

空载损耗计算软件
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

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

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