C/C++之链表的建立

个人主页:点我进入主页

专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶

C语言刷题

欢迎大家点赞,评论,收藏。

一起努力,一起奔赴大厂。

目录

1.头插

1.1简介

 1.2代码实现头插

1.3分析代码

2.尾插 

2.1简介

2.2代码

2.3分析代码


 

      学习了结构体后,我给大家带来一种利用结构体写链表的代码,链表是数据结构之一,其中的数据呈线性排列。在链表中,数据的添加和删除都较为方便,就是访问比较耗费时间链表在以后的数据结构中有很重要的作用,链表的写法分为两种,一种是头插,一种是尾插,这两种不同的写法带来哪些有趣的现象呢?让我们往下看。

1.头插

1.1简介

我们现象想一下,链表就是一些数据通过某种方式进行连接,我们可以大概的画成

 1.2代码实现头插

#include <stdlib.h>
#include <stdio.h>
struct ListNode {int data;struct ListNode* next;
};
struct ListNode*p=NULL,*head=NULL;
struct ListNode* createlist()
{int num;scanf("%d", &num);while (num != -1){p = (struct ListNode*)malloc(sizeof(struct ListNode));p->data = num;p->next = head;head = p;scanf("%d", &num);}
}

1.3分析代码

        在这里需要我们先创建一个结构体,它包含数据部分和指针部分,在进行创建链表时我们需要先创建一个struct ListNode类型的指针*p和*head,他们有不同的作用,p是用于创建节点,head是用于节点的链接和记录头结点的位置。具体分析如下:我们先对各个节点进行分配内存,也就是p=(struct ListNode*)malloc(sizeof(struct ListNode)),然后进行数据的初始化,也就是对p中的date进行赋值,让p指向的next指向head,第一次head指向NULL由于我们是头插,需要最后一个节点指向空,我们头插是在节点前创建节点也就是说新的p是头节点,不断改变头节点,我们让head指向p方便了节点的连接和记录头节点的位置。当我们按链表打印数据时是逆序输出。

2.尾插 

2.1简介

尾插不同于头插,它相较于头插更难理解,但是进行遍历时是按输入顺序进行打印。

2.2代码

#include <stdlib.h>
#include <stdio.h>
struct stud_node {int              num;      /*学号*/char             name[20]; /*姓名*/int              score;    /*成绩*/struct stud_node* next;    /*指向下个结点的指针*/
};
struct stud_node* head, * tail;
void input()
{struct stud_node* p;int nums;scanf("%d", &nums);head = NULL;while (nums != 0){p = (struct stud_node*)malloc(sizeof(struct stud_node));p->num = nums;scanf("%s", p->name);scanf("%d", &p->score);p->next = NULL;if (head == NULL){head = p;tail = p;}else{tail->next = p;tail = p;}scanf("%d", &nums);}
}

2.3分析代码

        同样需要我们先进行创建结构体,它包含数据部分和指针部分,在进行创建链表时我们需要先创建一个struct ListNode类型的指针*p和*head,以及*tail,他们有不同的作用,p是用于创建节点,head是记录头结点的位置,tail是用于节点的链接。具体分析如下:我们先对各个节点进行分配内存,也就是p=(struct ListNode*)malloc(sizeof(struct ListNode)),然后进行数据的初始化,也就是对p中的date进行赋值,p的next指向空这一步很重要,如果缺少这一步会导致链表的尾节点的next成为野指针,特别注意在进入循环前需要对tail,和head进行初始化,也就是指向空,我们第一次需要让head指向p,tail指向p,然后再此进入循环,这时我们可以画成

这时我们让tail的next指向p然后移动tail让他指向p也就是 

这样就完成了链表的连接。

今天的内容就结束了,希望大家可以学会链表的两种建立方式,最后不要忘记一键三连呦。 

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

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

相关文章

Spring Cloud Gateway 实现原理

Spring Cloud Gateway是Spring Cloud生态系统中的一个组件&#xff0c;用于构建基于Spring Boot的微服务架构中的网关服务。它的主要目的是提供一种灵活的方式来路由、过滤和转换HTTP请求&#xff0c;从而允许您构建强大、高性能的微服务应用程序。 以下是Spring Cloud Gatewa…

系统报错“由于找不到msvcp140.dll无法继续执行代码”的处理方法

我在使用电脑时&#xff0c;突然发现了一个错误提示&#xff1a;“无法启动程序&#xff0c;因为找不到msvcp140.dll文件”。这让我非常困惑&#xff0c;因为我确定这个文件应该存在于我的电脑上。但是电脑依然报错“由于找不到msvcp140.dll无法继续执行代码”&#xff0c;这个…

Java为什么有流,流的设计原则是什么?

目录 流的设计原则 为什么是一次性的&#xff1f; 流的设计原则 流的设计原则主要包括以下几个方面&#xff1a; 简单性和一致性&#xff1a;流的接口应该尽可能简单和一致&#xff0c;以使其易于使用和理解。流的操作应该在不同类型的流之间具有一致的行为&#xff0c;使程序…

java jpa查询没有id的表的方法

一、前言 jpa中&#xff0c;如果想查询数据库&#xff0c;必须有一个Entity实体类&#xff0c;这个类的内容要与数据库表的列一一对应&#xff1b; 并且这个类中&#xff0c;必须有一个Long id字段&#xff0c;对应数据库表中的id列。 IdGeneratedValue(strategy GenerationT…

vue仿企微文档给页面加水印(水印内容可自定义,超简单)

1.在src下得到utils里新建一个文件watermark.js /** 水印添加方法 */let setWatermark (str1, str2) > {let id 1.23452384164.123412415if (document.getElementById(id) ! null) {document.body.removeChild(document.getElementById(id))}let can document.createE…

数据结构类型

1.在C和C中static关键字的用法 在C中 1.static修饰未初始化全局变量&#xff0c;默认结果为0 2.static修饰局部变量&#xff0c;延长生命周期&#xff0c;生命周期不是作用域&#xff0c;它依旧是局部变量 3.static修饰函数只能在当前文件中调用&#xff0c;不可用跨文件调用…

安装对应版本pytorch和torchvision

遇见报错&#xff1a; ERROR: Could not find a version that satisfies the requirement torch (from versions: none) ERROR: No matching distribution found for torch 解决方法&#xff1a; 1、网站找到对应torch和torchvision版本&#xff0c;cp对应python版本&#xff…

MATLAB中pdist和pdist2的区别

一、pdist 和 pdist2 是MATLAB中用于计算距离矩阵的两个不同函数&#xff0c;它们的区别在于输入和输出以及一些计算选项。 pdist: pdist函数用于计算一组点之间的距离。 输入&#xff1a;通常接受一个矩阵&#xff0c;矩阵的每一行代表一个数据点&#xff0c;矩阵的列代表数据…

如何使用PyTorch训练LLM

推荐&#xff1a;使用 NSDT场景编辑器 快速搭建3D应用场景 像LangChain这样的库促进了上述端到端AI应用程序的实现。我们的教程介绍 LangChain for Data Engineering & Data Applications 概述了您可以使用 Langchain 做什么&#xff0c;包括 LangChain 解决的问题&#xf…

Visual Stadio使用技巧

C语言调试技巧 Debug 和 Release 的介绍 Debug&#xff1a;通常称为调试版本&#xff0c;它包含调试信息&#xff0c;并且不作任何优化&#xff0c;便于程序员调试&#xff08;可调试&#xff09;。 Release&#xff1a;通常称为发布版本&#xff0c;它往往时进行了各种优化&a…

Spring整合RabbitMQ-配制文件方式-2-推模式消费者

推模式的消费者 在推模式中使用可以两种实现&#xff1a; 使用ChannelAwareMessageListener. 除消息外&#xff0c;还提供了Channel这个对象&#xff0c;通过channel可以有更大的灵活性。 import com.rabbitmq.client.Channel; import org.springframework.amqp.core.Messa…

SpringMVC_执行流程

四、SpringMVC执行流程 1.SpringMVC 常用组件 DispatcherServlet&#xff1a;前端控制器&#xff0c;用于对请求和响应进行统一处理HandlerMapping&#xff1a;处理器映射器&#xff0c;根据 url/method可以去找到具体的 Handler(Controller)Handler:具体处理器&#xff08;程…

【Springcloud】Actuator服务监控

【Springcloud】Actuator服务监控 【一】基本介绍【二】如何使用【三】端点分类【四】整合Admin-Ui【五】客户端配置【六】集成Nacos【七】登录认证【八】实时日志【九】动态日志【十】自定义通知 【一】基本介绍 &#xff08;1&#xff09;什么是服务监控 监视当前系统应用状…

【NLP的python库(02/4) 】:Spacy

一、说明 借助 Spacy&#xff0c;一个复杂的 NLP 库&#xff0c;可以使用用于各种 NLP 任务的不同训练模型。从标记化到词性标记再到实体识别&#xff0c;Spacy 还生成了精心设计的 Python 数据结构和强大的可视化效果。最重要的是&#xff0c;可以加载和微调不同的语言模型以适…

代码质量保障第2讲:单元测试 - 浅谈单元测试

代码质量保障第2讲&#xff1a;单元测试 - 浅谈单元测试 本文是代码质量保障第2讲&#xff0c;浅谈单元测试。单元测试&#xff08;unit testing&#xff09;&#xff0c;是指对软件中的最小可测试单元进行检查和验证。这是基础&#xff0c;所以围绕着单元测试&#xff0c;我从…

HTTP代理协议原理分析

HTTP代理协议是一种常见的网络协议&#xff0c;它可以在网络中传递HTTP协议的请求和响应。本文将介绍HTTP代理协议的分析和原理&#xff0c;包括HTTP代理的工作流程、HTTP代理的请求和响应格式、HTTP代理的优缺点等方面。 一、HTTP代理的工作流程 HTTP代理的工作流程如下&#…

通过idea实现springboot集成mybatys

概述 使用springboot 集成 mybatys后&#xff0c;通过http请求接口&#xff0c;使得通过http请求可以直接直接操作数据库&#xff1b; 完成后端功能框架&#xff1b;前端是准备上小程序&#xff0c;调用https的请求接口用。简单实现后端框架&#xff1b; 详细 springboot 集…

【React 】useLayoutEffect 和 useEffect的区别

useLayoutEffect和useEffect是React中常用的两个Hook&#xff0c;它们的主要区别在于触发时机。 useEffect会在渲染完成后异步执行&#xff0c;不会阻塞浏览器的绘制操作。它适用于需要在组件渲染后执行副作用的情况&#xff0c;例如数据的获取、订阅事件等。它不会阻止屏幕更新…

redis zset score 求和

redis zset score 求和 local sum0 local zredis.call(‘ZRANGE’, KEYS[1], 0, -1, ‘WITHSCORES’) for i2, #z, 2 do sumsumz[i] end return sum 例子&#xff1a;lua ~$ redis-cli zadd z 1 a 2 b 3 c 4 d 5 e (integer) 5 ~$ redis-cli eval "local sum0 local zr…

Elasticsearch,Logstash和Kibana安装部署(ELK Stack)

前言 当今数字化时代&#xff0c;信息的快速增长使得各类组织和企业面临着海量数据的处理和分析挑战。在这样的背景下&#xff0c;ELK Stack&#xff08;Elasticsearch、Logstash 和 Kibana&#xff09;作为一套强大的开源工具组合&#xff0c;成为了解决数据管理、搜索和可视…