阅读本文约需要10分钟,您可以先关注我们或收藏本文,避免下次无法找到。

之前我们通过趣味图解法为大家介绍了二分查找的算法,今天我们一起来学习日常工作中经常能用到的算法链表。

成哥就是通过这个算法解决了网络ACL策略配置前后插入下发的问题。

01 简介

链表就是链式存储的线性表,它最大的优点在于可以有效利用零碎的内存空间,根据链表指针域的不同链表分为单向链表、双向链表等。

其实Python语言的列表类型的工作原理就是链表。本文章中我们将通过Python来模拟链表结构。但由于Python没有指针概念,我们将通过模拟指针的方法来实现链表。

02 单向链表

(1)单向链表简介

链表的每个元素不仅要存储这个元素值还要存储与这个元素相连的元素的指针值,这样才能实现链表的串联。

单向链表的每个元素包含一个本身的值和一个指向下一个数的指针。

这边要注意一下链表最后一个元素是没有指针的所以其指针为空指针。

如上图,从第一个元素开始,跟着指针箭头走直到没有存储下一个元素指针的最后一个数60为止,就完成了单链表的遍历。

好了我们现在了解了单链表的大概实现原理,现在我们看看如何用python代码来实现链表,具体代码如下:

输出结果如下:

(2)单向链表元素插入

上面章节我们了解了单向链表的实现原理,本章节我们看看单向链表怎么添加元素。如下图我们该怎么把元素35插入30与40这两个元素之间呢?

好了不卖关了我们可以先把35元素的指针指向它所要插入的位置后面一个元素40,如下图所示

接着把需要插入元素前面的元素指针指向该元素,也就是把30的指针指向35,这样就完成了链表的插入如下图所示

这时肯定会有读者问为什么要先把新插入元素的指针指向后一个元素,可不可以先把前一个元素30的指针指向35,其实答案是不可以的,当我们先把元素30的指针指向35,这时新元素35还没指向任何元素这将导致链表的断链,具体如下图所示:

下面我们看看如何通过代码实现链表元素的插入吧,代码示例如下:

输出结果如下:

(3)单向链表元素删除

如下图我们可以发现单向链表元素删除非常简单,直接通过当前元素指向下一个元素的指针来找到下一个元素位置,然后把这个位置赋值给当前元素的指针,这样当前元素的指针就会跳过下一个元素直接连接了下下个元素,这就完成了元素的删除具体如下图:

单链表元素的删除具体代码实现如下:

代码输入如下,可以发现元素50已经被删除,同时链表也可以正常按顺序输出:

03 双向链表

(1)双向链表简介

上面我们讲了单链表,现在我们一起来学习一下链表的另一种类型双链表,双链表的每个元素是由它的值和两个指针组成,一个指针指向上一个元素,一个指针指向下一个元素。双链表比起单链表的优势是可以进行双向遍历,如下图所示:

下面我们就通过Python代码来模拟一下双向链表的双向的链表输出

代码运行结果输出如下:

(2)双向链表元素插入

通过上面章节我们了解了双向链表的实现原理,现在我们再来看看对双向链表进行元素插入吧。

如上图第一步我们先对新插入的元素的两个指针赋值,分别将它们指向插入位置的后一个元素与前一个元素,接着第二步将后一个元素前指向指针与前一个元素后指向指针赋值指向新插入的元素,这样我们就完成了双向链表的元素插入。双链表比起单链表好处就是可以通过知道上一个元素的位置来插入新元素,也可以通过知道下一个元素的位置来插入新元素。在日常工作中双向链表适用范围比单向链表广,之前我们项目中就是用的双向链表来对ACL策略进行配置顺序调整的。

下面我们通过Python代码来实现双向链表的元素插入吧

代码执行结果如下,发现链表插入元素35后正反向都能正确进行遍历

(3)双向链表元素删除

双链表的删除其实和单向链表类似,我们要知道删除元素的前一个数的位置,然后通过要删除的元素来确定下下一个元素的位置,最后直接连接要删除的元素的前后两个数就完成了删除,如下图所示:

现在我们看看如何通过代码实现双向链表的元素删除吧

代码输入结果如下,发现元素35已经正确的删除了

至此我们的链表算法就讲完了,如果大家喜欢不要忘了点击@IT管理局关注、点赞与收藏哦!

本局精彩文章:

  • 趣味图解算法之二分查找
  • Wireshark数据包分析三板斧
  • IT工程师都需要掌握的容器技术之扫盲篇

语言zzuli链表遍历_趣味图解算法之链表相关推荐

  1. list 查找_趣味图解算法之二分查找

    大多数程序员在看到"算法"两字的时候,是不是头大如斗.但如果想去大公司发展,在面试时又绕不过算法这座大山.市面上好多讲解算法的书籍(如算法导论)基本上都太学术.太复杂,对初学者很不 ...

  2. 可由一个尾指针唯一确定的链表有_极客算法训练笔记(三),链表详细图解,别再逃避了朋友...

    目录 缓存引爆链表 链表单链表双向链表循环链表双向循环链表 LinkedHashMap实现LRU缓存,源码解析(JDK1.8) 算法 爬楼梯 算法 反转链表 算法 链表环检测 缓存引爆链表 存储结构 ...

  3. 单链表遍历_单链表及其遍历实现的基本操作

    单链表遍历 单链表 (Single linked list) Single linked list contains a number of nodes where each node has a d ...

  4. 就地链表反转_数据结构与算法系列之链表操作全集(二)(GO)

    以下完整的代码,及测试代码均可从这里获取 https://github.com/Rain-Life/data-struct-by-go 常见的链表操作 单链表反转 方法一:就地反转法 思路 就地反转法 ...

  5. python定义链表节点_Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】...

    本文实例讲述了Python数据结构与算法之链表定义与用法.分享给大家供大家参考,具体如下: 本文将为大家讲解: (1)从链表节点的定义开始,以类的方式,面向对象的思想进行链表的设计 (2)链表类插入和 ...

  6. java链表实现_数据结构——基于java的链表实现(真正理解链表这种数据结构)...

    一.链表介绍 1.什么是链表? 链表是一种物理存储结构上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.如下图所示,在数据结构中,a1里面的指针存储着a2的地址,这样一个 ...

  7. C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针

    代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <st ...

  8. C语言实用算法系列之学生管理系统_单向链表外排序_栈内数组存储链表节点指针

    代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <st ...

  9. 【终极完美高效】C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针数组

    代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <st ...

最新文章

  1. ecshop affiche.php,affiche.php
  2. springmvc国际化 基于浏览器语言的国际化配置
  3. Minst 0-9特征迭代次数曲线表达式
  4. php7.2 加载pgsql驱动,PHP启动:无法加载动态库PGSQL - php
  5. 大数据 — Hadoop
  6. 02 ansible核心模块 之 shell script
  7. Waymo在美国推出自动驾驶汽车共享服务
  8. 【转】SQL SERVER2005版本介绍
  9. python爬图代码实例_python爬虫爬取图片简单代码示例
  10. 微机计算机继电保护原理,微机继电保护的装置构成
  11. DSP6678核间通信
  12. Android聊天软件的开发(一)--预备知识
  13. php中的fpm_基于php-fpm的配置详解
  14. html加拼音注释,古诗加拼音注释版.doc
  15. 怎么把html格式转换成数字,Excel文本格式怎么转化成数字格式 excel文本转化数字格式教程...
  16. spark基础理论及优化思路
  17. flux 中的 buffer 的原理
  18. Vue实践--V-for指令
  19. 不用USBASP芯片也可用USB,纯AVR实现USB通讯:AVRUSB
  20. ubuntu下按键精灵xdotool

热门文章

  1. 深入探讨傅立叶变换、拉普拉斯变换、Z变换的联系与应用
  2. 长时间整理的xhtml网页设计规范
  3. 声明 struct x1 { ...}; 和 typedef struct { ...} x2; 有什么不同?
  4. javascript 调用c#变量实例
  5. Struts2学习总结二
  6. Maven -- group、artifact、package
  7. SringBoot项目使用maven打包,使用docker部署,并且使用thymeleaf作为模板引擎遇到的问题
  8. 详解网络摄像机中的IR-CUT
  9. [以太坊源代码分析] V. 从钱包到客户端
  10. Android MediaRecorder架构详解