关于链表指针的深刻理解

以下列代码为例

//终于给我搞清楚指针的指向究竟是怎么看的了// 按编号对职工记录进行递增排序
void sortById(List* list) {Employee* p, * q, * tail = NULL;// tail 变量则是一个边界指针,初始值为 NULL。while (list->head->next != tail) // tail 变量则是一个边界指针,等于tail时,即终止循环//tail只会不断向前靠,一旦tail为初始数据指针即排序完毕{p = list->head;//记录头结点,也就是链表位置的指针q = p->next;//记录初始起始数据指针,便于后面交换数据while (q->next != tail) {if (q->id > q->next->id) {p->next = q->next;//意思是p的头结点的下一个位置改为q->next,也就是直接连接了下一个最小的节点q->next = q->next->next;//同理,q的下一个节点,即下一个位置的连接为q的下一个的下一个节点的位置//也就是直接跳过了中间的q->next// 这里的意思是直接q节点直接跳过q->next,链接q->next->next的意思//你记住,在左边,最后一个next永远都是指它的下一个位置是什么的意思// 也就是与哪个节点连接的意思//而如果前面有多的next,才是看作一个整体,// 如q->next->next,//可看成(q->next)->next,即q的下一个节点的下一个位置,即链接的位置是哪?//而如果在右边,那么next的意思那就全都是看作一起,也就是一个整体//直接把右边的指针看作成一整块,而不是分开来。/*  很简单,代码从来都是左边操作,右边赋值的*/p->next->next = q;/* 这个就很经典了,意思是(p->next)->next*///即p->next这个整体的下一个位置,链接何处q = p->next;/* q重新指向为p->next这个位置*///更新p的指针位置,即更新交换后的起始数据指针}p = p->next;q = q->next;//第一次循环的时候,已经将头指针和最小的节点给确认了//所以前两个点可以不用管了,直接往下与新的节点比较就好}tail = q;//当内循环退出时,表示当前轮次的排序已完成。将 tail 设为最后一次交换的节点 q,相当于缩小了待排序的范围。//就是冒泡排序的道理一样的,最后的数据一定是最大的,每一次排序完后,最后的位置是不用动的,//而前面的数据很可能还要反复地交换,tail就是每一次标记每次循环中最大的数据,一旦遇见直接跳出排序即可}printf("按编号排序已完成。\n");
}
//理解误区//指针的next本质上不是替换,而是位置的确认!
//你记住,next无论如何都是指当前的值的下一个位置指向哪里
//是指向哪里 ,也就是包含了链接的意思,同时又确认了当前指针的下一个位置是什么
//而不是替换值的大小!
//你记住,链表指向的意思是,当前指针的前一个节点,或者下一个节点是什么,是连接也是存储不同的值
//不要把指针和next等同于一个单位看,它还包括了链表之间的连接关系!//你该关注的是什么,不是next和pre,而是最原始的指针如p,q
//你要关注的是目前p,q这样的指针的具体动向在哪,有没有改变,如果改变了他们的指向也会变得不同
//如果没变,那么p,q永远都是在同一个位置!
//关注原始指针!//同时还有很重要的一点,就是你一定要考虑清楚,指针究竟有没有改动,以及下一个位置究竟是哪
//都是前后文,自己要注意和看清楚位置究竟是哪,然后,前面自己有改动的地方也要知道
//总的来说就是你一定要清楚自己指针指向的最新位置是哪,前面的可以不考虑
//但当前指向的最新位置一定要清楚!// 按部门号对职工记录进行递增排序,若部门号相同,则按职工编号递增排序

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

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

相关文章

【通信系列 1 -- GSM 和 LTE】

文章目录 1. LTE(Long Term Evolution)1.1 FDD&TDD简介1.1.1 3G与4G差异1.1.2 频点与band关系1.1.3 band 与运营商的关系 1.2 TDD&FDD区别1.2.1 FDD帧结构1.2.2 TDD帧结构1.2.3 TDD&FDD优势对比1.2.4 TDD缺点 1.3 VoLTE1.3.1 VoLTE 优点11.3.2 VoLTE 优点21.3.3 Vo…

【ARM Coresight 系列文章19 -- Performance Monitoring Unit(性能监测单元)

文章目录 1.1 PMU 介绍1.2 PMU 寄存器1.2.1 PMU 管理寄存器1.2.2 PMU 外设识别寄存器1.2.3 PMU 组件识别寄存器1.3 性能监控事件1.3.1 Cortex-A9 特定事件1.1 PMU 介绍 许多体系结构都包含 PMU(Performance Monitoring Unit)硬件,用于跟踪、计数系统内部的一些底层硬件事件…

MySql运维篇---009:分库分表:垂直拆分、水平拆分、通过MyCat进行分片,读写分离:一主一从、 双主双从

3.分库分表 3.1 介绍 3.1.1 问题分析 使用单个数据库存储所有的数据,如果磁盘和内存和内存不足了可以增大磁盘和内存,但是对于一台服务器的磁盘和内存不可能无限制的扩张下去,它是受我们服务器的硬件影响的,如果说数据库所存储…

mp4音视频分离技术

文章目录 问题描述一、分离MP3二、分离无声音的MP4三、结果 问题描述 MP4视频想拆分成一个MP3音频和一个无声音的MP4文件 一、分离MP3 ffmpeg -i C:\Users\Administrator\Desktop\一个文件夹\我在财神殿里长跪不起_完整版MV.mp4 -vn C:\Users\Administrator\Desktop\一个文件…

机器学习之自训练协同训练

前言 监督学习往往需要大量的标注数据, 而标注数据的成本比较高 . 因此 , 利用大量的无标注数据来提高监督学习的效果有着十分重要的意义. 这种利用少量标注数据和大量无标注数据进行学习的方式称为 半监督学习 ( Semi…

Java进击框架:Spring-Bean初始化过程(五)

Java进击框架:Spring-Bean初始化过程(五) 前言源码初始化配置加载Bean加载Bean对象加载Bean切面 Bean工厂后置处理器注册Bean后置处理器初始化消息源初始化应用程序事件多播器注册监听器完成Bean工厂初始化Bean初始化完成刷新应用上下文创建完…

VSCODE+PHP8.2配置踩坑记录

VSCODEPHP8.2配置踩坑记录 – WhiteNights Site 我配置过的最恶心的环境之一:windows上的php。另一个是我centos服务器上的php。 进不了断点 端口配置和xdebug的安装 这个应该是最常见的问题了。从网上下载完php并解压到本地,打开vscode,安装…

【网路安全 --- Linux,window常用命令】网络安全领域,Linux和Windows常用命令,记住这些就够了,收藏起来学习吧!!

一,Linux 1-1 重要文件目录 1-1-1 系统运行级别 /etc/inittab 1-1-2 开机启动配置文件 /etc/rc.local /etc/rc.d/rc[0~6].d## 当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在 /etc/init.d 目录下,然后在 /etc/rc.d/rc*.d 中建…

XLSX.utils.sheet_to_json() 数字格式转为字符串格式

raw 默认为true,设置为false就可以了 XLSX.utils.sheet_to_json(workbook.Sheets[sheet], {raw:false})

Maven NetBeans

目录 在 NetBeans 里打开一个 Maven 项目 在 NetBeans 里构建一个 Maven 项目 在 NetBeans 里运行应用程序 NetBeans 6.7 及更新的版本已经内置了 Maven。对于以前的版本,可在插件管理中心获取 Maven 插件。此例中我们使用的是 NetBeans 6.9。 关于 NetBeans 的一…

竹云筑基,量子加密| 竹云携手国盾量子构建量子身份安全防护体系

9月23日-24日,2023量子产业大会在安徽合肥举行。作为量子科技领域行业盛会,2023年量子产业大会以“协同创新 量点未来”为主题,展示了前沿的量子信息技术、产业创新成果,并举办主旨论坛、量子科普讲座等系列专项活动。量子信息作为…

PDMS二次开发(二十一)——关于Pipeline工具生成螺栓材料表的计算思路

目录 1.简述2.螺栓元件的数据2.1 A1A等级中螺栓元件库2.2 A1A等级中法兰元件库2.3 A1A要指定螺栓等级2.4 螺栓等级数据解析 3.问题解释 1.简述 因为有好几个网友问到螺栓材料表生成报错的问题,我初步分析可能还是因为螺栓元件库的问题,我这里对Pipeline…

Spark入门

Spark 1.Spark概述 2.Spark特点 3.RDD概述 1. Spark概述 什么是Spark 回顾:Hadoop主要解决,海量数据的存储和海量数据的分析计算。 Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。 Hadoop与Spark历史 Hadoop与Spark框架对比 Dr…

内网渗透面试问题

文章目录 1、熟悉哪些域渗透的手段2、详细说明哈希传递的攻击原理NTLM认证流程哈希传递 3、聊一下黄金票据和白银票据4、shiro反序列化漏洞的形成原因,尝试使用burp抓包查看返回包内容安装环境漏洞验证 5、log4j组件的命令执行漏洞是如何造成的6、画图描述Kerberos协…

9-AJAX-上-原理详解

一、定义 1、什么是Ajax Ajax:即异步 JavaScript 和XML。Ajax是一种用于创建快速动态网页的技术。通过在后台与进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。而传统的…

时代风口中的Web3.0基建平台,重新定义Web3.0!

近年来,Web3.0概念的广泛兴起,给加密行业带来了崭新的叙事方式,同时也为加密行业提供了更加具有想象力的应用场景与商业空间,并让越来越多的行业从业者们意识到只有更大众化的市场共性需求才能推动加密市场的持续繁荣。当前围绕这…

【物联网】Arduino+ESP8266物联网开发(一):开发环境搭建 安装Arduino和驱动

ESP8266物联网开发 【物联网】ArduinoESP8266开发环境配置 1.开发环境安装 开发软件下载地址: 链接: https://pan.baidu.com/s/1BaOY7kWTvh4Obobj64OHyA?pwd3qv8 提取码: 3qv8 1.1 安装驱动 将ESP8266连接到电脑上,安装ESP8266驱动CP210x 安装成功后&…

【快速入门】JVM之类加载机制与Native

感慨: 如何定义一个合格的Java程序员,Java程序员要了解掌握哪些知识点,网上的面试题太多了,后端需要了解掌握的知识点太多太多了,Java基础、数据结构、异常、多线程、Spring、Spring boot、事务、算法、数据库&#xf…

asp.net网上销售系统VS开发mysql数据库web结构c#编程Microsoft Visual Studio计算机毕业设计

一、源码特点 asp.net 网上销售系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为mysql,使用c#语言开发 aspnet 网上销售系统1 二、功能介绍 前台功能…

Spring Boot:自定义注解--annotation

目录 自定义注解的定义和作用范围如何创建自定义注解创建注解接口 如何使用自定义注解进行数据验证创建注解处理器控制器中使用注解 如何为字段添加注解 自定义注解的定义和作用范围 自定义注解可以作用在类、方法、属性、参数、异常、字段或其他注解上。 如何创建自定义注解…