当前位置: 首页 > news >正文

P1 什么是链表 C语言简单易懂

目录

前言

01 什么是链表

02 数组的特点 

03 数组的缺点

3.1 删除数组其中一个元素

3.2 数组增加某个节点

04 链表


前言

                                 

🎬 个人主页:@ChenPi

🐻推荐专栏1: 《 C++ 》✨✨✨ 

🔥 推荐专栏2: 《 Linux C应用编程(概念类)》✨✨✨

📝推荐专栏3: ​​​​​​《链表_@ChenPi的博客-CSDN博客》 ✨✨✨
🍉本篇简介:>:讲解链表的运行方式和链表和数组的区别

这一节,我们来讲解链表。很多很多人看到链表两个字啊,就觉得怕,其实它不可怕的,而且很好用,现在我们就来讲解链表

01 什么是链表

它就是一个普通结构体的应用而已。

链表啊,它是一个好东西啊,之所以能够存在列表这个东西,说明它能够帮忙解决一些实际问题。

链表只是一种数据结构。

那所谓的数据结构就是数据存放的思想。

明我们说编程难的并不是c语言本身,

而是一些思想。其中,链表就是一种数据存放的一种思想。

02 数组的特点 

我们以前学过数据存放,也可以说数据的一个集合。

学过数组吧,大家都对这个数组很熟悉

他非常明白了一个特点是。每一个元素地址。都是连续的。

比如说我们一个数组arr。

int arr[10] = {0,1,2,3,4,5,6,7,8,9,10};

其中有10个数据,比如说12345678910啊。

它就是在内存连续的一段空间。存放123456  直到10啊,假设这个初始地址是你0x00啊,那么第二个是0x0,int整形数的大小是四个字节,地址是连续的,也就是说。最大空间就是10*4 = 40

数组的特点就是在一个连续的内存空间里面存放着某些特点的数据

这是它的特点啊,一种比较特别的数据存储方式 

03 数组的缺点

那这样有什么缺点吗?

数组的话改其中的数据或者查询数据的话其实还好

但是如果你要增加一个元素呢?你要删除一个元素呢?

3.1 删除数组其中一个元素

删除一个元素是不是很很困难?

数组的地址是连续的

假设说,我这个第三个元素被我干掉了。那你该如何处理这个地址空间,

它的数据已经变得不连续了。

如果要把右边的数据都往左移

你的运算量就比较大了,你要挪动整个数组。

3.2 数组增加某个节点

比如说我要在这个六跟七之间啊,加一个11啊,怎么办啊?

因为他们地址连续的代表这个空间是没有多余的内存的,

实际上,你要把11存放进来,你首先要数到六,然后把七八九十往后挪一挪,

腾出一个位置给11啊,你的内存的开销,你的运算量肯定会变大的,所以说不灵活

而且数组一开始的时候就把大小给确认了,所以说不管是malloc也好,还是数组,也是都是一口气申请了多大的空间啊,他们都存在这个问题不灵活,

04 链表

那链表表就很好的解决了这个问题。列表的每一项,它都是一个结构体。

struct Node {int value; // 值Node *next; // 下一个节点指针
};

比如说我现在有一个链表,

里面有两项一项是一个整形数的一个数据value

下一个是一个指针,struct Node * test

比如说现在有这个结构体1

结构体1里面有个指针,我结构体1的指针指向结构体2的地址,结构体2的指针指向结构体3的地址,也就是说这几个结构体是被串联在一起的

这样子无疑就给整个数据的存储添加了很大的灵活性,比如说我现在有这么一串数啊,12345。

我先要把三删掉,那不很简单吗,把二里面存放的地址改成四嘛就完了删就删掉了就一句话

如果要是数组的话呢?12345,你把3删掉,删掉以后,这个内存啊,数据还得往前挪,五个数据还好,假设后面有100个数据?你都要挪多少次啊啊

如果是链表,那我这个后面有100个数据,是不是也很好处理啊?跟后面的数据没关系吧,我只要去变动二里面的指针地址只像是就可以了,多灵活是不是那我先要增加一下怎么办呢?

同样的我有100个数据,我想要在这个这里插入一下,怎么办?那它的下一个指向它那新的下一个指向这个。链表很灵活,

那下一小章,我们来正式的来学习链表,它是个好东西,不要怕它啊,学会以后合理的使用它。

相关文章:

P1 什么是链表 C语言简单易懂

目录 前言 01 什么是链表 02 数组的特点 03 数组的缺点 3.1 删除数组其中一个元素 3.2 数组增加某个节点 04 链表 前言 🎬 个人主页:ChenPi 🐻推荐专栏1: 《 C 》✨✨✨ 🔥 推荐专栏2: 《 Linux C应用编程(概念…...

Python实现FA萤火虫优化算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法(Fire-fly algorithm,FA)由剑桥大学Yang于2009年提出 , …...

Spring Task

Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 **定位:**定时任务框架 **作用:**定时自动执行某段Java代码 cron表达式 cron表达式其实就是一个字符串,通过cron表达式可以定义任务触…...

HttpServletRequest/Response视频笔记

学习地址:144-尚硅谷-Servlet-HttpServletRequest类的介绍_哔哩哔哩_bilibili 目录 1.HttpServletRequest 类 a.HttpServletRequest类有什么作用 b.HttpServletRequest类的常用方法 c.如何获取请求参数 d.解决post请求中文乱码问题 获取请求的参数值相关问题 …...

网上选课系统源码(Java)

JavaWebjsp网上选课系统源码 运行示意图:...

mac修改默认shell为bash

1. 打开系统偏好设置 2. 点击用户群组 3. 按住ctrl,点击用户名 4. 点击高级选项,修改登录shell 参考:在 Mac 上将 zsh 用作默认 Shell - 官方 Apple 支持 (中国)...

基于Java SSM小区物业管理系统

小区有多栋住宅,每栋楼有多套物业(房屋),物业管理公司提供物业管理服务,业主需要按月缴纳物业费。小区物业管理系统对物业公司的日常工作进行管理。系统管理的对象及操作有: 楼宇信息:楼号、户数、物业费标准。 房屋信…...

计算机网络408

一:计算机网络体系结构 1.计网的概念,组成,功能和分类 一:计算机网络的发展 (3)从功能组成视觉看:分为资源子网和通信子网 2.计网性能指标 注意:带宽影响链路入口处的发射速率—>从而影响了…...

【android开发-01】android中toast的用法介绍

1,android中toast的作用 在Android开发中,Toast是一种用于向用户显示简短消息的轻量级对话框。它通常用于向用户提供一些即时的反馈信息,例如操作结果、提示或警告。 Toast的主要作用如下: 提供反馈:Toast可以在用户…...

打印元素绘制协议Java实现

我一直提倡的面向接口和约定编程,而打印元素绘制协议一直是我推荐的打印实现方式,我以前只是强调按打印元素绘制协议输出数据就行了,有实现程序按协议控制打印,说是可以用任何语言实现客户端程序而不影响打印业务,那么…...

js 处理编译器html 包含img的标签并设置width

var imgElements document.getElementsByTagName(img); for (let imgElement of imgElements) { //1.如果有style属性,去掉style属性中的width属性和height属性 if (imgElement.hasAttribute(st…...

同旺科技 分布式数字温度传感器 -- OPC Servers测试

内附链接 1、数字温度传感器 主要特性有: ● 支持PT100 / PT1000 两种铂电阻; ● 支持 2线 / 3线 / 4线 制接线方式; ● 支持5V~17V DC电源供电; ● 支持电源反接保护; ● 支持通讯波特率1200bps、2…...

php获取过去一段的时间范围

在 PHP 中获取过去一周的时间,你可以使用 DateTime 和 DateInterval 类。这里是一个示例代码,展示如何获取从今天起算的过去一周(7天)的日期: // 当前日期 $today new DateTime();// 设置日期为一周前 $oneWeekAgo …...

张三、如花、王婆带你了解Shell命令以及运行原理

文章目录 前言概述张三、王婆、如花的故事Shell命令以及运行原理后记 前言 Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序&…...

redis介绍和安装、redis普通连接和连接池、字符串类型、hash类型、列表类型列表类型

文章目录 redis介绍和安装安装步骤启动,连接 redis普通连接和连接池普通连接连接池 redis字符串类型redis hash类型redis列表类型 redis介绍和安装 redis 什么? 数据库就是个存数据的地方:只是不同数据库数据组织,存放形式不一样…...

集成开发环境PyCharm的使用【侯小啾python领航计划系列(三)】

集成开发环境 PyCharm 的使用【侯小啾python领航计划系列(三)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…...

Flink(九)【时间语义与水位线】

前言 2023-12-02-20:05,终于写完啦,最近状态不错。刚写完又收到了她的消息哈哈哈哈,开心。 再去全力打拼一次,奋战一场,就算最后打了败仗也无所谓,至少你留下了足迹。 《解忧杂货店》 1、时间语义 …...

torch中的随机数种子

如何在torch生成随机数时,设置随机种子,要求每次调用生成的随机数都一样 在 PyTorch 中,可以使用 torch.manual_seed(seed) 函数设置随机种子,以确保每次运行代码时生成的随机数都一样。 以下是一个示例代码,展示了如…...

C 标准库 <math.h>

C 标准库 <math.h> C <math.h>头文件声明了一组函数来执行数学运算&#xff0c;例如&#xff1a;sqrt()计算平方根&#xff0c;log()查找数字的自然对数&#xff0c;等等。 math.h 头文件定义了各种数学函数和一个宏。在这个库中所有可用的函数都带有一个 double…...

一篇带你串通数据结构

文章目录 导论数据结构的定义数据结构在计算机科学中的重要性为什么学习数据结构很重要 1、基本概念1.1、数据、数据元素和数据项的概念1.2、数据对象与数据结构的关系1.3、逻辑结构与物理结构 2、线性结构2.1、数组2.2、链表2.3、栈2.4、队列 3、非线性结构3.1、树3.2、图 4、…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...