程序设计综合实习(C语言):链表的创建

news2024/12/28 4:38:43

一、目的

1.掌握单向链表的概念

2.掌握单向链表的创建、查找、删除方法

二、实习环境

Visual Stdio 2022

三、实习内容、步骤与要求

1.创建一个单向链表,存放10个学生的学号,姓名,并输出这种10个学生的信息。

2.在链表中查找指定学号的学生,输出其姓名。

3.在链表中删除指定学号的学生,然后输出其余学生的信息。

4.在实习报告中画出程序流程图,说明程序设计的算法,附主要程序段及运行结果(屏幕截图)。

5.在实习报告中说明知识点。

6.在实习报告中说明程序设计过程中的难点、解决办法及编程小结或体会。

四、程序流程图、算法及运行结果 

程序流程图 

算法描述

1.定义一个结构体stu表示学生信息,包括学号和姓名,并定义一个指向下一个学生的指针。
2.声明变量p和q,分别表示链表中当前节点和其前驱节点,同时声明头节点head 和尾节点tail。
3.循环输入10个学生信息,每输入一个学生信息就新建一个stu节点,并将其插入链表末尾。若链表为空,则让head和tail指向该新节点。
4.输出所有学生的学号和姓名。
5.输入要查找的学号x,按顺序遍历链表并寻找学号为x的学生,若找到则跳出循环。
6.输出被查找到学生的学号和姓名。
7.输入要删除的学号x,按顺序遍历链表并寻找学号为x的学生,同时记录其前驱节点q和当前节点p。
8.将q的后继节点设为p的后继节点,即跳过了要删除的节点。
9.输出删除后其余学生的学号和姓名。

程序代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct stu
{
	int num;
	char name[100];
	struct stu* next;
};
int cnt;
int main()
{
	struct stu* p, * q, *head = NULL, *tail = NULL;
	int num;
	int i;
	int x;
	char name[100];
	//输入学生信息
	for(i=0;i<10;i++)
	{
        printf("输入学生的学号,姓名:\n");
        scanf("%d%s", &num, name);
		p=(struct stu*)malloc(sizeof(struct stu));
		if (p != NULL)
		{
			p->num = num;
			strcpy(p->name, name);
			p->next = NULL;
		}
		if (head == NULL)
		{
			head = p;
			tail = p;
		}		
		else
		{
			tail->next = p;
			tail = p;
		}
	}
	//输出学生的信息
	printf("输出学生的学号,姓名:\n");
	p = head;
	while (p != NULL)
	{
		printf("%d %s\n",p->num,p->name);
		p = p->next;
	}
	//输入要查找的学号x
	printf("请输入要查找的学号:\n");
	scanf("%d", &x);
	p = head;
	while (p != NULL)
	{
		if (p->num == x) break;
		p = p->next;
	}
	//输出查找的学号及姓名
	printf("学号:%d 姓名:%s\n", p->num, p->name);
	//输入删除的学号x
	printf("请输入要删除的学号:\n");
	scanf("%d", &x);
	//进行删除操作
	p = head;
	q = head;
	while (p != NULL)
	{
		cnt++;
		if (p->num == x) break;
		q = p;
		p = p->next;
	}
	if (cnt == 1) head = p->next;
	else q->next = p->next;
	//输出删除后其余学生的信息
	printf("输出其余学生的学号,姓名\n");
	p = head;
	while (p != NULL)
	{
		printf("%d %s\n", p->num, p->name);
		p = p->next;
	}
	free(p);
	return 0;
}

运行结果 

 

五、知识点、难点及解决办法。

知识点

1.结构体:定义了一个包含学号和姓名的结构体struct stu;
2.动态内存分配:使用malloc函数在堆上动态分配内存;
3.链表的创建:根据用户输入的学号和姓名,将其存储在新节点中,并将节点加入链表中;
4.链表的遍历:通过遍历链表中的每一个节点,输出学生的学号和姓名;
5.链表的查找:用户输入要查找的学号x,通过遍历链表找到学号为x的节点;
6.链表的删除:用户输入要删除的学号x,通过遍历链表找到学号为x的节点,并将其从链表中删除;
7.的使用:使用指向结构体的指针变量p和q来操作链表中的节点。

难点及解决办法

1.字符串不能直接用等号赋值,应该用strcpy赋值

2.内存动态分配:利用malloc函数进行内存动态分配,保证程序运行过程中所需的内存空间足够,并且释放已经不再使用的空间,如果忘记释放就会出现内存泄露,要记得使用free函数进行释放,以避免内存泄露

3.结构体成员中有指向下一个结构体的指针,用于构建链表,要牢记

4.一开始删除学号1001时会出现错误,于是将其单独处理,当第一个节点的学号就是要删除的学号时,就直接head=p->next

六、编程小结或体会。

该代码实现了学生信息的录入、输出、查找和删除功能。使用了结构体和链表的知识点。代码中首先定义了一个结构体stu,包含了学号和姓名两个成员变量,以及指向下一个节点的指针next。然后通过动态内存分配函数malloc()来为每个学生信息创建一个结构体,并将其插入到链表中。接下来实现了输出所有学生信息的功能,通过遍历链表来依次输出每个节点中的学号和姓名。在查找某个学生信息时,需要输入该学生的学号,然后遍历整个链表,直到找到该学生的信息。
在删除某个学生信息时,同样需要输入该学生的学号,然后遍历整个链表,找到该学生的信息,并将其从链表中删除。最后再次输出剩余学生的信息。
总体来说,该程序实现了基本的链表操作,要想完成该程序,需要熟练掌握基本的链表的操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/599932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式锁框架-Redisson

分布式锁框架-Redisson 一、Redisson介绍二、在SpringBoot中使用Redisson三、Redisson工作原理四、Redisson使用扩展4.1、Redisson单机连接4.2、Redisson集群连接4.3、Redisson主从连接 五、分布式锁总结5.1、分布式锁特点5.2、锁的分类5.3、Redission的使用 基于Redis看门狗机…

chatgpt赋能python:Python以图搜图:如何用Python优化SEO?

Python以图搜图&#xff1a;如何用Python优化SEO&#xff1f; 随着搜索引擎算法的普及&#xff0c;优化您的SEO策略需要更多的创意和技巧。一种方法是使用Python以图搜图&#xff0c;具有该技能可以使您的网站上升到搜索结果列表的顶部。在这篇文章中&#xff0c;我们将探讨Py…

在外部编译器中使用pyqgis

pyqgis_dragonzoebai的博客-CSDN博客 升级后整理 例如在vscode当中添加qgis提供的python解释器&#xff0c;那么就可以使用qgis.core等库 批量处理gdb文件夹&#xff0c;导出对应文件夹目录的geojson文件。 我的gdb文件均没有坐标系&#xff0c;因此需要自己设置正确的坐标系…

chatgpt赋能python:Python网页的SEO优化指南

Python 网页的 SEO 优化指南 在如今互联网高度竞争的时代&#xff0c;一个网站的优化已经成为了至关重要的一环&#xff0c;特别是 SEO 优化。而对于使用 Python 开发网站的人来说&#xff0c;如何进行 SEO 优化&#xff0c;也是需要着重考虑的问题。本文将介绍一些 Python 网…

BGP选路规则实验

1、BGP选路规则实验-基础配置 1&#xff09;拓扑 2&#xff09;基础配置 第一步&#xff1a;基础配置&#xff1a; R1的配置&#xff1a; sysname R1 # interface GigabitEthernet0/0/0 ip address 192.168.12.1 255.255.255.0 # interface GigabitEthernet0/0/1 ip addres…

DeiT详解:知识蒸馏的Transformer

DeiT详解&#xff1a;知识蒸馏的Transformer 0. 引言1. ViT2. DeiT2.1 知识蒸馏2.1.1 提出背景2.1.2 理论原理 2.2 DeiT模型 3. 总结 0. 引言 针对 ViT 需求数据量大、运算速度慢的问题&#xff0c;Facebook 与索邦大学 Matthieu Cord 教授合作发表 Training data-efficient i…

工控机设备安全-系统加固分析

工控设备安全现状 工业控制系统是支撑国民经济的重要设施&#xff0c;是工业领域的神经中枢。现在工业控制系统已经广泛应用于电力、通信、化工、交通、航天等工业领域&#xff0c;支撑起国计民生的关键基础设施。 随着传统的工业转型&#xff0c;数字化、网络化和智能化的工…

倾斜摄影三维模型数据的高程偏差修正的几何纠正技术方法探讨

倾斜摄影三维模型数据的高程偏差修正的几何纠正技术方法探讨 倾斜摄影是一种先进的数字摄影技术&#xff0c;可以生成高分辨率、高精度的三维模型数据。然而&#xff0c;在倾斜摄影中&#xff0c;由于相机的倾斜角度和地形的高程差异&#xff0c;可能会出现高程偏差问题。为了…

Java性能权威指南-总结4

Java性能权威指南-总结4 Java性能调优工具箱操作系统的工具和分析CPU运行队列磁盘使用率网络使用率 Java监控工具基本的VM信息 Java性能调优工具箱 操作系统的工具和分析 CPU运行队列 快速小结 检查应用性能时&#xff0c;首先应该审查CPU时间。优化代码的目的是提升而不是…

树莓派初体验:开机啦

感谢大佬的赞助&#xff0c;这玩意是真的贵哇&#xff0c;呜呜呜呜呜呜&#xff0c;根本买不起 一、烧录系统 需要&#xff1a;SD卡&#xff08;推荐16G&#xff09;、读卡器&#xff08;推荐高速读卡器&#xff09; 进入官网&#xff1a;https://www.raspberrypi.com/softwa…

《MYSQL必知必会》读书笔记2

哈夫曼树的学习&#xff1a; http://t.csdn.cn/XJhUI 创建计算字段 字段&#xff1a;基本上与列的意思相同&#xff08;数据库列一般称为列&#xff0c;而字段通常用于计算字段连接上&#xff09; 拼接字段 拼接&#xff1a;将值联结到一起构成单个值 把两个结拼接起来&a…

【2023最叼教程】Appium自动化环境搭建保姆级教程

APP自动化测试运行环境比较复杂&#xff0c;稍微不注意安装就会失败。我见过不少朋友&#xff0c;装了1个星期&#xff0c;Appium 的运行环境还没有搭好的。 搭建环境本身不是一个有难度的工作&#xff0c;但是 Appium 安装过程中确实存在不少隐藏的比较深的坑&#xff0c;如果…

编程(38)----------计算机的部分原理

本篇主要总结一些计算机的理论部分. 计算机在发展历程中,无论是最早的巨无霸机器,还是现在小到可以拿在手中的掌机.只要其本质上是计算机,在最基础的结构上,都是以冯诺依曼体系所构建的. 冯诺依曼体系大致将计算机分为几个最重要的部分:输入,输出,中央处理器,存储设备.也就是…

Meta Quest 3发布:超越虚拟现实全新境界

2023年6月2日凌晨&#xff0c;全球领先的虚拟现实技术公司Meta隆重推出了Meta Quest 3无线头戴式显示器。这款全新设计的头戴设备从内到外焕然一新&#xff0c;为用户提供了全方位的体验。 借助全新一代骁龙芯片&#xff0c;Meta Quest 3拥有比Quest 2更高两倍的GPU处理能力&am…

VanillaNet详解:极简的网络模型

VanillaNet详解&#xff1a;极简的网络模型 0. 引言1. 网络结构2. 如何提高简单网络的非线性2.1 深度训练策略2.2 基于级数启发的激活函数3. 实验4. 代码解析总结 0. 引言 深度学习模型架构越复杂越好吗&#xff1f; 自过去的几十年里&#xff0c;人工神经网络取得了显著的进…

chatgpt赋能python:Python在硬件开发中的作用

Python在硬件开发中的作用 随着物联网的快速发展&#xff0c;越来越多的硬件设备需要与互联网连接。Python在硬件开发过程中扮演着重要的角色。 Python的优势 作为一种高级编程语言&#xff0c;Python有以下几个优势&#xff1a; 简单易学&#xff1a;Python的语法简洁清晰…

chatgpt赋能python:Python做网页可以直接访问吗?

Python做网页可以直接访问吗&#xff1f; Python作为一门功能强大的编程语言&#xff0c;近年来在Web开发中也越来越受欢迎。很多人或企业都采用Python来开发网站和网页&#xff0c;那么问题来了&#xff0c;Python做的网页能否直接被搜索引擎访问和索引呢&#xff1f; Pytho…

MySQL5-事务隔离级别和锁机制

❤️ 个人主页&#xff1a;程序员句号 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac;关注 &#x1f338; 订阅专栏&#xff1a;MySQL性能调优 原创博文、基础知识点讲解、有一定指导意义的中高级实践文章。 认真或有趣的技术分享。 该专栏陆…

【数据结构】数据结构与算法基础 课程笔记 第七章 查找

&#x1f680;Write In Front&#x1f680; &#x1f4dd;个人主页&#xff1a;令夏二十三 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;【数据结构】 &#x1f4ac;总结&#xff1a;希望你看完之后&#xff0c;…

Emacs之解决gtags -i --single-update占用率100%卡死问题(一百零六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…