对链表的进一步认识

news2024/9/23 1:41:16

********以下内容均是个人理解,个人语言,仅代表个人观点,希望能对你有所帮助***************

1.对链表的进一步深入理解分析

(1)逻辑结构:想象出来的,并不是真实存在的,例如里面的箭头,指针的指向,phead和pcur都指向链表里面的第一个节点;

(2)对于结点的理解:到底什么是节点,我的理解就是链表里面的一些相同的结构,很多个节点组成了链表;

节点里面包含哪些数据:一个是我们的data数据,还有一个就是next指针,这个指针指向链表里面的下一个节点位置的数据,这2个部分就是链表里面的结点的组成;

(3)物理结构(在内存里面实实在在进行存储的):这个才是内存里面的链表真实存在的形态,phead存储链表里面的第一个节点位置data的地址,第一个节点的next存放第二个节点的data的地址,以此类推,最后的一个节点next指针指向的是空的;

(4)pcur=pcur->next,减号加上箭头就是取出里面的数据(可以理解为解引用);全称就是结构体成员访问操作符(通过名字我们也可以理解是在结构体里面使用);我们首先让pcur和phead指向同一个地址处,也就是第一个节点的位置,cur->data打印的就是1,cur=cur->next,到底应该如何理解?

(我们用1,2,3这个链表为例子)在我看来,cur->next就是下一个结点的地址,也就是第二个节点的地址,赋值给cur,因为cur是一个指针变量,这个时候cur就会指向第二个节点的位置,以此类推,打印完3之后,cur->next指向为空,赋值给cur,cur也是空的,就会跳出循环。

2.链表里面到底为什么会使用到二级指针,你真的明白吗?

(1)我之前是通过调试发现我定义的形参phead,实参plist,在调试的过程中,发现形参phead确实可以改变,但是这个改变不会同步到plist实参,因此我们意识到可能是参数的类型定义有问题

(2)下面我们正面地分析一下,为什么使用二级指针?我列举下面的两个例子:一个要改变的是int类型的变量a,一个是要改变int*类型的变量a;

左边的a本来就不是指针,我们传递的a的地址,相当于就是一个变量的地址,我们使用int*类型的形参进行接收就可以了;

右边的a本来就是指针,我们传递的a的地址,相当于是一个一级指针的地址,我们需要使用int**类型的p进行接收,才可以修改a的数值;

应用到这个里面:我们的plist本来就是一个指针,只不过这个指针类型不是上面的int*,而是一个结构体类型(slnode*类型)的指针,我们想要改变他,就要传递他的地址,使用二级指针进行接收

(3)我们上面是进行的尾部插入数据,原来定义的新的节点是空的,我们要改变里面的值,所以二级指针进行接收,但是打印链表的时候,不会改变节点处的数值,而只是仅仅访问,所以使用一级指针进行接收就可以了。

3.顺序表并不是一无是处,链表也不是无所不能

顺序表:

(1)线性表,我们可以随机访问里面的数据(顺序遍历的数据是有下标的),排列是连续的;

(2)我们增容可能会造成空间的浪费,插入数据的时候,也会需要一个一个地挪动,挪动的时候效率很低下;

链表:
(1)非线性表,我们无法随机的访问里面的数据,因为每个节点之间不是连续排列的,我们只能通过next指针一个一个地向下寻找;

(2)随时进行增容,不会造成空间的浪费,而且插入数据的时候只需要改变链表的结点位置next指针的指向,不需要一个一个地进行挪动,大大提高了效率;

总结:顺序表和链表各有利弊,我们应当辩证地进行看待,对于随机的访问数据,这个在某些算法里面是有要求的,例如二分查找算法,以及优化算法里面的快排,可见链表虽然在某些方面优于顺序表,但是链表也有自己的局限性。

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

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

相关文章

idm线程越多越好吗 idm线程数多少合适

IDM(Internet Download Manager)是一款流行的下载管理软件,它支持多线程下载,这意味着它可以同时建立多个连接来下载文件的不同部分,从而提高下载速度。我们在使用IDM的时候总是有很多疑问,今天我们学习IDM…

HIT The Wiorld,HIT世界官网地址+配置要求+测试时间+加速器分享

HIT The Wiorld,HIT世界官网地址配置要求测试时间加速器分享 NEXON新游《HIT:世界(HIT:The World)》将在4月17日上线,目前已在官网开启事前预约预创建角色。Hit :the world(HIT:世界&#xff…

鸿蒙 Failed :entry:default@CompileResource...

Failed :entry:defaultCompileResource... media 文件夹下有文件夹或者图片名称包含中文字符 rawfile 文件夹下文件名称、图片名称不能包含中文字符

说说你对链表的理解?常见的操作有哪些?

一、是什么 链表(Linked List)是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,由一系列结点(链表中每一个元素称为结点)组成 每个结点包括两个部分&…

Hdevelop编辑器常用功能

1、灰度直方图 【阈值分割】——对应算子threshold 通过菜单【可视化】-【工具】-【灰度直方图】打开,打开后选中【变量窗口】的某张图片即可进行灰度直方图分析。 刚打开并选中某张图片: 调节【最小化】和【最大化】的两个竖线,此时图中绿…

Spectre漏洞 v2 版本再现,影响英特尔 CPU + Linux 组合设备

近日,网络安全研究人员披露了针对英特尔系统上 Linux 内核的首个原生 Spectre v2 漏洞,该漏洞是2018 年曝出的严重处理器“幽灵”(Spectre)漏洞 v2 衍生版本,利用该漏洞可以从内存中读取敏感数据,主要影响英…

笔记84:关于递归法的一些感悟

题目1:二叉树的前序遍历 链接:. - 力扣(LeetCode) /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(…

C# 关于进程回收管理的一款工具设计与分享

目录 设计初衷 开发运行环境 Craneoffice ProcessGC 运行主界面 管理任务与策略 其它设置 移动存储设备管理 核心代码-计时器监控 小结 设计初衷 在使用 COM 模式操作 OFFICE 组件的开发过程中,当操作完相关文档后,在某些情况下仍然无法释放掉…

2024.4.19 Python爬虫复习day07 可视化3

综合案例 需求: 已知2020年疫情数据,都是json数据,需要从文件中读出,进行处理和分析,最终实现数据可视化折线图 相关知识点: json json简介: 本质是一个特定格式的字符串 举例: [{},{},{}] 或者 {}python中json包: import jsonpython数据转为json数据: 变量接收json…

Unity类银河恶魔城学习记录12-17 p139 In game UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI.cs using UnityEngine;public class UI : MonoBehaviour {[SerializeFie…

kworker(kworker/u2:1,kworker/0:13,kworker/0:1H) 工作队列的命名

1、概述 工作队列是除软中断和tasklet以外最常用的下半部机制之一。工作队列的基本原理是把work(需要推迟执行的函数)交由一个内核线程来异步执行。关于工作队列的具体使用请读者参考其他资料,本文不再概述。 在创建工作队列时,可以通过flag参数指定创建的工作队列…

(四)C++自制植物大战僵尸游戏启动流程

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/ErelL 一、启动方式 鼠标左键单机VS2022上方工具栏中绿色三角按钮(本地Windows调试器)进行项目启动。第一次启动项目需要编译项目中所有代码文件,编译生成需要一定的时间。不同性能的电…

AVB简介(二): gPTP简介

AVB简介(二): gPTP简介 一、时间同步要解决的问题二、gPTP的主要思想2.1 体系结构2.2 主时钟选取2.3 绝对时间同步2.4 相对时间同步 三、影响校时精度的因素3.1 传输时延不对称3.2 驻留时间3.3 时间戳采样点3.4 时钟频率3.5 传输路径延时测量方式3.6 时钟…

idea运行Tomcat,控制台日志的中文乱码

一 版本 win10,idea2022,jdk18,tomcat9 二 问题描述 在idea上可以运行Tomcat。服务器启动后,可以正常访问本地的html文件。但是控制台的Tomcat日志出现了乱码:server与Tomcat Catlina Log两处。 三 无效的解决之道 1 idea的Help选项Edit …

Spring ORM

Spring Data JPA 作为Spring Data 中对于关系型数据库支持的一种框架技术,属于 ORM 的一种,通过得当的使用,可以大大简化开发过程中对于数据操作的复杂度。 Java里面写的一段DB操作逻辑,是如何一步步被传递到 DB 中执行了的呢?为什么 Java 里面可以去对接不同产商的 DB 产…

ExtendSim花生酱加工厂模型

该模型展示了ExtendSim可靠性模块与ExtendeSim离散速率技术相结合的协同作用。 在花生酱加工厂的最初阶段,花生经过烘烤和冷却。冷却后的花生经过热烫或水烫去外皮。这些经过漂白的花生进入过程的混合部分,在研磨机中用盐、葡萄糖和氢化油稳定剂将其粉碎…

MySQL排序你真的掌握了吗?5个问题考考你

测试sql数据 CREATE TABLE student (id int NOT NULL AUTO_INCREMENT,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,age int DEFAULT NULL,money int DEFAULT NULL,PRIMARY KEY (id) USING BTREE,KEY index_name (age) ); INSERT INTO st…

【Linux】线程的控制

目录 POSIX线程库 常用的POSIX线程库接口声明: 注意事项 创建一个进程 pthread_create函数 参数 返回值 使用示例 线程ID和进程地址空间布局 线程ID 进程地址空间布局 示例图 获取一个进程的线程ID 函数原型 返回值 使用示例 注意事项 线程终止 p…

SpringBoot项目整合ACTable实现实体类快速生产数据库表

1.安装 ACTable依赖 <dependency> <groupId>com.gitee.sunchenbin.mybatis.actable</groupId> <artifactId>mybatis-enhance-actable</artifactId> <version>1.5.0.RELEASE</version> </dependency> 使用mybatis…

如何做一个springboot的starter类型的SDK

关键的东西 首先我们是一个starter类型的SDK&#xff0c;为了给调用者使用&#xff0c;其中有一些Bean我们会放到SDK中&#xff0c;并且这些Bean能够注入到调用者的Spring容器中。 最关键的spring.factories文件 这个文件所在位置如下图所示&#xff0c;该文件通过写入一下代…