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个数据,我想要在这个这里插入一下,怎么办?那它的下一个指向它那新的下一个指向这个。链表很灵活,

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

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

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

相关文章

Leetcode98 验证二叉搜索树

题意理解: 首先明确二叉树的定义,对于所有节点,根节点的值大于左子树所有节点的值,小于右子树所有节点的值。 注意一个误区: 根节点简单和左孩子,右孩子比大小是不够的,要和子树比,…

2024年天津天狮学院专升本专业课考试报名通知

天津天狮学院2024年高职升本科专业课报名时间考试时间通知 1.报名条件 报名条件和具体要求按照天津市招生委员会的文件规定执行。考生必须完成文化课报名环节,且填报天津天狮学院志愿,方可报考我校专业课考试。考生提供的各种证件应真实有效&#xff0…

数据结构和算法-树和二叉树的定义和基本术语和性质

文章目录 树的基本概念和相关术语相关的应用节点间的关系描述节点,树的属性描述有序树vs无序树树vs森林小结 树的相关性质考点1考点2考点3考点4考点5考点6小结 二叉树的相关概念和基本术语重要 (五种状态)特殊二叉树小结 二叉树的相关性质二叉…

中职组网络安全-FTPServer20221010.img(环境+解析)

任务环境说明: √服务器场景:FTPServer20221010.img √服务器操作系统:未知(关闭链接) √FTP用户名:attack817 密码:attack817 1.分析attack.pcapng数据包文件,通过分析数据包attack…

elasticsearch聚合、自动补全、数据同步

目录 一、数据聚合1.1 聚合的种类1.2 DSL实现聚合1.2.1 Bucket聚合语法1.2.2 聚合结果排序1.2.3 限定聚合范围1.2.4 Metric聚合语法 1.3 RestAPI实现聚合 二、自动补全2.1 拼音分词器2.2 自定义分词器2.3 自动补全查询2.4 RestAPI实现自动补全 三、数据同步3.1 思路分析3.1.1 同…

PCP的Parallel Repetition

1. 引言 见Alessandro Chiesa等人2023年论文《On Parallel Repetition of PCPs》。 Parallel Repetition(并行重复)可用于: 降低probabilistic proofs的soundness error 的同时提升某些衡量指标的效率 interactive proofs(IPs…

模型层——多表操作

多表操作 一 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄。 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息。作者详情模型和作…

YOLOv5全网独家首发改进:SENetv2,Squeeze-Excitation模块融合Dense Layer,效果秒杀SENet

💡💡💡本文自研创新改进:SENet v2,针对SENet主要优化点,提出新颖的多分支Dense Layer,并与Squeeze-Excitation网络模块高效融合,融合增强了网络捕获通道模式和全局知识的能力 推荐指数:五星 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/catego…

【24押题卷】小马哥终极押题3+1!

告别11月,迎接12月!说来也是缘分,各平台发了快200套真题,梳理了6本教材课后习题,讲解了吴大正、郑君里、奥本三本重点习题。终于我“悟了”,你们会发现,我今年做的每一套真题解析,几…

Linux Ubuntu protobuf 安装方法

文章目录 安装方法检验安装意外状况 安装方法 去GitHub官网找下载地址 安装 protobuf 21.11 GitHub 资源地址 选择安装版本 (是一个URL网址) 例如这里选用:protobuf-all-21.11.zip 资源 安装依赖库,执行指令 6. sudo apt-get …

【Node.js】笔记整理4 - 版本管理工具nvm

写在最前:跟着视频学习只是为了在新手期快速入门。想要学习全面、进阶的知识,需要格外注重实战和官方技术文档,文档建议作为手册使用 系列文章 【Node.js】笔记整理 1 - 基础知识【Node.js】笔记整理 2 - 常用模块【Node.js】笔记整理 3 - n…

【JAVA面向对象编程】--- 探索子类如何继承父类

🌈个人主页: Aileen_0v0🔥学习专栏: Java学习系列专栏 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 继承 继承的普通成员方法调用 及 普通成员变量修改 构造方法的调用 子类构造方法 继承 package Inherit;class Animal …

如何制作一个数字人?流程是怎样的?

​​虚拟人概念从早期动漫领域的初音未来用一首《甩葱歌》让绿色双马尾的“歌姬”形象火出圈,到洛天依登上央视春晚舞台,再到众多虚拟歌手、虚拟主播、KOL、代言人等活跃于各种情境中。 去年以来,元宇宙和虚拟人技术进入全球科技产业的聚光灯…

Day46力扣打卡

最近一直在做以前的题,刷题量都没有怎么增长,感觉自己算法一直不太行,但也只能菜就多练了。 打卡记录 由子序列构造的最长回文串的长度(区间DP) 链接 第二次刷这道题,相比上回思路来的很快,但…

IDEA maven无法下载源代码处理

1、使用idea内置maven 在idea中新增一个mvn运行项,截图如下: 输入命令: dependency:resolve -Dclassifiersources 2、如果外部maven,不使用idea内部maven 在工程目录下命令行执行命令: mvn dependency:resolve -Dclassifiersources

Linux信号超详细剖析

预备知识: 一、信号产生(OS发给进程) 1、键盘组合键 Linux中,一次登录对应一个终端,bash/shell。且只允许一个进程是前台进程,默认就是bash/shell,其它都是后台进程。获取键盘输入的是前台进程。 Ctrlc: 向前台进程…

面试题:什么是负载均衡?常见的负载均衡策略有哪些?

文章目录 一、负载均衡二、负载均衡模型分类三、CDN负载均衡四、LVS负载均衡4.1 LVS 支持的三种模式4.1.1 DR 模式4.1.2 TUN 模式4.1.3 NAT 模式 4.2 LVS 基于 Netfilter 的框架实现 五、负载均衡策略是什么六、常用负载均衡策略图解6.1 轮询6.2 加权轮询6.3 最少连接数6.4 最快…

C#基础与进阶扩展合集-进阶篇(持续更新)

目录 本文分两篇,基础篇点击:C#基础与进阶扩展合集-基础篇 二、进阶扩展 1、Predicate 2、设置C#语言版本 3、ListCollectionView过滤集合 4、Adapt适配器 5、值类型与引用类型 6、程序设置当前项目工作目录 7、获取App.config配置文件中的值 …

【计算机网络笔记】虚拟局域网(VLAN)

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

使用 CSS Grid 的响应式网页设计:消除媒体查询过载

文章目录 前言介绍 CSS Grid让我们开始吧实现高级响应性1、Repeat() 2、Auto-fit3、Minmax()结论 前言 你是否厌倦了在实现响应式网站时需要管理多个媒体查询?说再见复杂的代码,拥抱更简单的解决方案吧:CSS Grid。 在这篇文章中,…