| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【数据结构】单链表 -> 正文阅读 |
|
[数据结构与算法]【数据结构】单链表 |
链表的种类有很多,这里只挑选其中的部分种类来实现 目录 1.链表概念链表同样是线性表的一种,其特点是物理存储结构不连续,逻辑顺序是通过链表中的引用链接次序来实现(具体可以想象下火车车厢是如何连接的) 具体结构如下图: 节点分为两个部分,一部分用来存放数据,另一部分存放下一节点的地址,第一个节点称为头结点 2.链表分类链表的种类有很多,主要有3个特点
上图所示就是单向,双向的话节点就需要分成3部分,多出来的部分用来存放上一个节点的地址
不循环就是最后一个节点指向null,循环则是指向头结点
带头就是头结点不存放数据,只存放下一个节点的地址,不带头就是头结点也存放数据 带头的链表头节点是不变的 上述的特点进行排列组合的话就有8种链表结构,但是我们的重点只有两种
?本文实现的就是不带头单向不循环链表 3.链表的实现首先链表是由节点组成,所以在链表类中定义一个节点的内部类
由于链表的结构,链表的增删改查等操作都需要头节点,所以在类里面再定义一个头节点,而且我想在实例化的时候可以直接在后面写数据,所以再加一个构造方法
接下来就是链表的操作,这里只讲增和删,这两个掌握,查和改也就不需要过多讲了 3.1增加数据3.1.1头部添加数据既然是头部添加数据,那么这个添加进来的节点就是新的头节点 ?代码如下:
3.1.2尾部添加数据在尾部添加数据的话,我们需要找到链表的最后一个节点,但找到最后一个节点要找到前一个节点,以此类推就是需要遍历整个链表,最后一个节点指向null就是循环结束的依据,将其指向的地址改为新加入的节点的地址即可 代码如下:
?3.1.3任意位置加入数据首先要判断给的位置是否合法,合法的话我们才能进行后面的操作 所以需要一个方法来获取链表的长度
通常情况下我们需要找到此位置前一个位置的节点,先将前一个节点存储的地址给新节点存储,然后再让前一个节点指向新的节点 因为要找到前一个位置的节点,所以需要一个查找方法:
代码如下:
?3.2删除数据这里写两个方法,给定一个值,一个是删除这个值第一次出现位置的节点,另一个是删除所有位置出现此方法的节点 3.2.1删除第一次出现key值的位置的节点首先判断链表是否为空链表,不是再继续往下 如果要删除的节点恰好是头结点的话让头结点汪后面移动一位即可,其它位置则是将前一个位置的节点存储的地址改为要删除的节点存储的地址 代码如下:
?3.2.2删除所有位置出现key值的节点按照上面的思路,我们在遍历链表的时候依旧需要找到前一个节点,所以定义两个节点,一个从头节点开始,一个从头节点的下一个节点开始,二者同时往后移动,遇到是key值的节点就删除,最后再处理一下需要删除头节点的情况 代码如下:
单链表就结束了,后面会找一些关于链表的oj题目,来看看单链表的实际使用 完 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 3:50:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |