数据结构|链表

news/2024/11/25 16:26:28/
概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表
中的指针链接次序实现的 。

单链表的形式就像一条铁链环环相扣

它与顺序表最大的不同是,单链表的数据存储是在不连续的空间,存储的数据里面含有下一个数据的地址,我们访问下一个数据,只要访问这个数据的地址,然后通过地址找到接下来的数据。

顺序表的创建

我们这样写就写死了,我们利用一个typedef来灵活书写数据的类型

后面我们利用SLTDatetype就可以代替int

之后,我们要修改数据类型,只需要改typedef后面的int

我们先写一个单链表的打印函数

单链表也是可以打印的,只不过我们打印出来的是空的

我们先在主函数创建一个结构体

那么我们的打印函数就可以设计成

利用一个while循环来就行多次打印,如果phead为空指针我们就不打印
如果单链表为空,我们就打印一个空指针

数据的添加有头加,尾加,在某个位置加

数据的删除有头删,尾删,删某个位置数据

数据的头加

我们插入数据前需要申请空间,利用malloc申请一个结构体大小的空间

申请后我们将数据赋给申请节点的data

将里面的指针暂时置空,如果后面有数据再连接起来

我们不确定后面是否还有数据,所以我们将node->next的值与传入的函数相连接

我们链表的头就等于我们头插数据申请的地址
我们为什么要使用二级指针进行操作?
我们知道,形参是实参的临时拷贝,如果改变里面的数据就需要传它的地址,直接对地址里面的元素进行操作。
上面的也是一样,我们传结构体的地址,然后我们利用二级指针进行接受,这样我们就可以修改结构体里面的内容

我们头插一下数据看看

尾插一个数据

尾插数据怎么做到的

我们也需要分类谈论,如果是一个空链表我们直接将node与plist连接就好了

我们尾插数据的时候也需要利用malloc申请空间,然后你就会发现,部分的代码与头插的相识,就是申请空间,那么我们后续可以专门封装一个申请空间的函数,增加程序的可读性

第一步:申请空间

第二步:判断是否为空链表,空链表直接插入

第三步:找到原链表的最后一个地址,将最后的地址与新申请的连接上

我们如何在特殊位置插入数据呢,比如我们在pos位置后面插入数据,我们怎么操作

从图中看出,我们将新申请的节点给pos->next,我们给pos->next之前我们需要将pos->next的地址存起来,因为pos->next存的是原pos后面的地址

使用我们可以先将pos->next给新申请节点的next,然后再将新节点的地址给pos->next

我们在pos之后插入数据之后我们,需要知道pos的位置,我们创建一个函数专门来查找指针的地址

在pos后面插入数据函数

我们来用一用

那么在pos的前面怎么插入数据,其实方法可以与在pos后面插入一样,只要将在pos后面插入的数据,与pos处的数据交换就好了

下面我们来进行删除操作

怎么删除首元素呢

我们进行删除前需要判断链表是否为空,空链表就无法删除了

我们头删前将首地址记录,完成删除后,我们将地址释放

首先我们是将第二个元素的地址给头

然后释放首地址

数据的尾删又是怎么操作的

首先判断是否是空链表
如果只有一个元素直接删除
如果有多个元素我们先找到它的尾再进行删除

这种方法可以不需要记录,我们间接的记录了地址,释放,置空,就好了

如何删除pos之后的元素

第一步:寻找pos的位置
第二步:删除(画图)

在删除pos前的元素,操作大同小异


http://www.ppmy.cn/news/30851.html

相关文章

Unity iOS 无服务器做一个排行榜 GameCenter

排行榜需求解决方案一(嗯目前只有一)UnityEngine.SocialPlatformsiOS GameCenterAppStoreConnect配置Unity 调用(如果使用GameCenter系统的面板,看到这里就可以了)坑(需要获取数据做自定义面板的看这里)iOS代码Unity 代码吐槽需求 需求:接入…

【Linux】进程间通信概念匿名管道

文章目录进程间通信介绍进程间通信的本质进程间通信的目的进程间通信的分类管道匿名管道匿名管道原理pipe函数匿名管道通信的4情况5特点读取堵塞写入堵塞写端关闭读端关闭总结进程间通信介绍 进程间通信简称IPC(Interprocess communication):进程间通信…

Python每日一练(20230308)

目录 1. Excel表列名称 ★ 2. 同构字符串 ★★ 3. 分割回文串 II ★★★ 🌟 每日一练刷题专栏 C/C 每日一练 ​专栏 Python 每日一练 专栏 1. Excel表列名称 给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。 例如&#xff1…

HDFS写数据流程

HDFS写数据流程,如图所示。 1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。 2)NameNode返回是否可以上传。 3)客户端请求第一个 Block…

vue3的v-model指令

1. 普通input输入框双向绑定 <template><!-- 1. 普通input输入框双向绑定 --><!-- 其实等价于&#xff1a;<input :value"title" update:modelValue"newTitle>titlenewTitle"/> --><input type"text" v-model&qu…

Java中对象的finalization机制

本篇文章我们详细介绍Java中对象的finalization机制&#xff0c;以及怎么使用finalize()方法&#xff0c;将即将被回收的对象&#xff0c;拉回来。1、finalization机制Java语言提供了对象终止&#xff08;finalization&#xff09;机制来允许开发人员提供对象被销毁之前的自定义…

LSTM网络:一种强大的时序数据建模工具

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

【预告】ORACLE Unifier v22.12 虚拟机发布

引言 离ORACLE Primavera Unifier 最新系统 v22.12已过去了3个多月&#xff0c;应盆友需要&#xff0c;也为方便大家体验&#xff0c;我近日将构建最新的Unifier的虚拟环境&#xff0c;届时将分享给大家&#xff0c;最终可通过VMWare vsphere (esxi) / workstation 或Oracle …