单链表(7)

news2024/11/15 7:40:19

插入函数——插入数据,在链表plist的pos位置插入val数据元素

由图知,pos==length时,是可以插入的

在大多数情况下,说位置的时候,从0开始计数;说第几个数据的时候,从1开始计数

现在来测试一下

这就是链表的插入比顺序表快很多的特点,顺序表中要插入一个数据,就把它后面的所有数据挨个往后移动一个格子,一个插入所有元素就要全移动一遍(特别是如果要头插,插入0号位置),所以说顺序表就是——大量的移动格子,也让速度慢了很多。        而链表只改变相关指针的指向。

所以链表适用于频繁的插入与删除。

这是顺序表的特点

链表里面头插函数都是单条语句(时间复杂度为O(1)),执行起来就比顺序表中插入函数的for循环要快。

而链表的尾插函数有for循环,时间复杂度为O(n),而顺序表中尾插为O(1)。

例如要插入数据1000,这里进程就一直在循环找尾巴

然后找到根据条件就退出了

退出后执行插入操作

删除函数——删除pos位置的值

这里有等号是因为5号位置不能执行删除,但5号位置可以插入,所以插入判断中没等号

错误写法:p->next的值已经发生改变后再来free它

*所以链表中,删除必先保存

现在来测试一下

多个测试用例以保证程序的健壮性

链表里面常考3点:头插尾插按(val)值删除

销毁整个内存函数

这里的头结点head是一个临时变量,除了head头结点之外,剩下所有的结点都是malloc申请来的。所以用完后必须要free,也就是调用销毁函数

之前说过有些没有内存泄漏是因为return 0;了,退出内存会自动归还

但有很多程序永远也执行不到return 0那一句话,在while(1)里面死循环,永远都不退出

清空函数——在链表里面没有必要用

如果结构还要留下继续下一次的使用,那么在下一次往后的每一次的插入删除操作进行之前,还要再多查一次这个结构还剩下几个结点,人也记不住,剩下旧的结点跟新的操作需求的结点一般也对不上,用完后还要再执行申请新的结点,多余些复杂不必要的步骤(每次操作前都要判断),——所以直接连结构一起销毁更好。即——这里的清空直接调用销毁函数,不要结构了

销毁整个内存函数——把所有的结点都删掉——总是删除第一个数据结点——只要第一个点存在,就把它删掉,直到不存在第一个数据结点为止

当删除(free1)第一个结点时,要保证这条链的结构还在(剩下2345),否则就会内存泄漏

所以要一共free5次,就是数据12345,而头结点是不用free的

因为头结点是这里的临时变量,不是malloc来的

也就是一个malloc对应一个free,不能多也不能少

没有malloc,只有free——程序崩溃了

只有malloc,没有free——内存泄漏了

测试

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

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

相关文章

CSDN的规范、检测文章质量、博客等级好处等等(我也是意外发现的,我相信很多人还不知道,使用分享给大家!)

前言 都是整理官方的文档,方便自己查看和检查使用,以前我也不知道。后来巧合下发现的,所以分享给大家! 下面都有官方的链接,详情去看官方的文档。 大家严格按照官方的规范去记录自己工作生活中的文章,很快…

MacOS Ventura 13 优化配置(ARM架构新手向导)

一、系统配置 1、About My MacBook Pro 2、在当前标签打开新窗口 桌面上创建目录的文件夹,每次新打开一个目录,就会创建一个窗口,这就造成窗口太多,不太好查看和管理,我们可以改成在新标签处打开新目录。需要在&…

电动自动换刀高速电主轴的技术优势浅析

在制造业中,自动化技术的发展一直是一个重要的话题。其中,电动自动换刀被认为是一项高效、智能、先进的技术,在高速电主轴中使用电动自动换刀这一技术,不仅能够缩短换刀时间,还能减少换刀失误,本文将探讨Sy…

光计算1周2篇Nature,英伟达的时代彻底结束!

近期,光计算领域连续发出重量级文章,刊登在学术界的顶级期刊上。一时间,各大媒体纷纷转发,读者们也纷纷感叹:中国芯片取代英伟达的机会来了!今天,光子盒用这篇万字长文为大家梳理光计算的背景、…

指标类型(一):北极星指标、虚荣指标

每个产品都有很多指标,每个指标都反映了对应业务的经营情况。但是在实际业务经营中,却要求我们在不同的产品阶段寻找到合适的指标,让这个指标可以代表当前产品阶段的方向和目标,让这个指标不仅对业务经营团队,而且对产…

双十一网络电视盒子哪个品牌好?内行分享权威电视盒子排行榜

双十一大促正如火如荼进行中,因为我从事的工作和电视盒子有关,身边的朋友们在选购电视盒子时不知道从何下手就会问我的意见,本期将盘点业内公认的电视盒子排行榜,给双十一想买电视盒子的朋友们做个参考。 排行一:泰捷W…

【C++】非类型模板参数 | array容器 | 模板特化 | 模板为什么不能分离编译

目录 一、非类型模板参数 二、array容器 三、模板特化 为什么要对模板进行特化 函数模板特化 补充一个问题 类模板特化 全特化与偏特化 全特化 偏特化 四、模板为什么不能分离编译 为什么 怎么办 五、总结模板的优缺点 一、非类型模板参数 模板参数分两类&#x…

MVVM框架:图片加载有问题

一、前言:在我使用ImageView加载图片的时候添加如下代码发现报错 app:imageUrl"{viewModel.observableField.assetImg}"报错如下错误 二、原因:是啥我不太清楚好像是没有imageView的适配器,后来我看了一下确实没有 public class I…

Java中所有的运算符,以及运算符优先级(总结)

运算法是一种特殊的符号,用于表示数据的运算、复制、比较等。 1、算数运算符 // % 取余运算:结果的符号和被模数的符号一致 12 % 5 2 -12 % 5 -2 12 % -5 2 -12 % -5 -2int a1 10; int b1 a1; // a111, b111 int a2 10; int b2 a2; // a211, …

keras转onnx,TensorFlow转tf.keras.models.load_model,onnx精度转换

参考: https://blog.csdn.net/Deaohst/article/details/126864267 转onnx 别直接转onnx。 先转PB: import tensorflow as tfmodel_path ./models/model.h5 # 模型文件 model tf.keras.models.load_model(model_path) model.sa…

Microsoft outlook已停止工作

故障现象 运行outlook,无法进入程序,显示已停止工作 故障截图 解决方案 1、点击查看问题详细信息,查看故障模块名称,一般是某个dll动态链文件,然后下载或者拷贝该dll文件将其覆盖即可 2、如果找不到,可以使用专用的…

如何向MapInfo Pro添加自定义符号?

用户可以在MapInfo Pro中创建和使用自己的自定义图像作为符号。要访问这些自定义符号,请将它们放在CUSTSYMB目录中,然后从“符号样式”对话框(Style>符号样式)的“字体”列表中的“自定义符号”选项中选择它们。MapInfo Pro中的…

智慧化城市内涝的预警,万宾科技内涝积水监测仪

随着城市化进程的加速,伴随的是城市内涝问题日益凸显。频繁的暴雨和积水给市民的生活带来了诸多不便,也给城市的基础设施带来了巨大压力。如何解决这一问题,成为智慧城市建设的重要课题和政府管理的工作主题,只要内涝问题得到缓解…

实时数仓-Flink使用总结

阿里云实时计算Flink版是阿里云基于Apache Flink构建的企业级、高性能实时大数据处理系统。具备一站式开发运维管理平台,支持作业开发、数据调试、运行与监控、自动调优、智能诊断等全生命周期能力。本期将对Flink的使用进行总结。 1. Flink产品回顾 阿里云实时计算…

11月13日星期一今日早报简报微语报早读

11月13日星期一,农历十月初一,早报微语早读。 1、国家邮政局:“双11”当天全国快递业务量达6.39亿件; 2、公安机关通缉4名缅北电诈头目,其中一人为缅甸掸邦议会原议员; 3、多部门提醒:未满10…

【Debug】此语法需要一个导入的帮助程序,但找不到模块“tslib”

报错如下: 代码可以编译运行,但是会有红线和报错。 解决方法:TypeScript error “TS2354: This syntax requires an imported helper but module ‘tslib’ cannot be found” Issue #37991 microsoft/TypeScript GitHub 在tsconfig.jso…

MacOS下VMware Fusion配置静态IP

前言 在虚拟机安装系统后,默认是通过DHCP动态分配的IP,这会导致每次重启虚拟机ip都可能会改变,使用起来会有很多不便。 配置静态IP 查看主机网关地址 cat /Library/Preferences/VMware\ Fusion/vmnet8/nat.conf 查看主机DNS,m…

【中间件篇-Redis缓存数据库06】Redis主从复制/哨兵 高并发高可用

Redis高并发高可用 复制 在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis 副本。复制功能是高可用Re…

贵金属投资怎样分析市场行情?

分析市场行情对于贵金属投资者来说非常重要,它可以帮助投资者更好地理解市场趋势和价格走势,从而做出更明智的投资决策。以下是一些常用的方法和工具,可用于贵金属市场行情分析: 1、基本面分析:基本面分析主要关注供求…

数字货币swap交易所逻辑系统开发分析方案

随着数字货币市场的快速发展, Swap交易所已成为一种重要的交易方式。本文将对数字货币Swap交易所逻辑系统开发进行分析,并探讨其优势、开发难点和解决方案。 一、数字货币Swap交易所逻辑系统开发的优势 数字货币Swap交易所是一种点对点的交易方式&#x…