Bootstrap

随记2-基础数据结构(链表)

前言:会尽量用简洁和通俗易懂的语言来分享我对链表的理解


正文

链表的概念:是一种动态线性数据结构(可随时扩展或缩小),由一个或多个节点通过指针连接而成

而节点又包括两个部分:

1.数据域:存储数据的

2.指针域:存储指向前一个或者后一个指针的地址

链表也分种类,等会细讲


通俗易懂来讲⬇️

可以把链表理解成火车,一节节车厢则是节点,指针则是每节车厢的连接钩,车尾的节点(尾节点)为空(NULL,代表结束)

Python暂时还没有内置方法,得手动创建链表类,但是Java有一个LinkedList(双向链表)的方法

应用场景:频繁插入/删除操作


链表的操作也是四大类

优势:增/删效率高

缺点:不能任意访问,只能顺序访问,所以得从头遍历


原理╭☞(  ̄ ▽ ̄)╭☞

  1. 一辆火车(链表),你想插入一节车厢(节点)(),只需要断开前后车厢的连接钩(指针),插入新的车厢,再进行连接,无需移动前后车厢位置
  2. 有节车厢不要了,先断开这节车厢(节点)前后的连接钩(指针),移除该车厢(释放内存资源)(),再将前后车厢连接起来,其过程也不需要移动前后车厢位置
  3. 有节车厢(节点)里面装的是可乐(存储的数据),想把可乐换成雪碧,直接将车厢里面的可乐换成雪碧就好了(),不需要调整车厢之间的连接关系
  4. 某车厢(节点)有一个💣,而你要找出来,就只能从火车头(头节点),一个一个往后找(),而不能直接跳到某个车厢查看

     

    这串代码看不懂没关系,其实我也不懂  A相当于是火车头(头节点), ListNose(1)相当于是火车头里面的装载的东西(存储的数据),以此类推B,C,⚠️这里的None是作为停止条件的,“next”相当于前后车厢连接钩(指针),假设我要想得到3结果,我就得从A通过next(指针)访问到B,B再访问到C

链表的种类:

单向链表,双向链表循环链表循环双链表

⚠️:“→”这个箭头叫后继指针

      “←”这个箭头叫前驱指针

单向链表:

优点:插入/删除高效

缺点:查找慢,无法回溯,只能从头遍历到尾

 

双向链表:

优点:双向遍历(可以从头或者从尾开始遍历)

OS:突然想到一个应用场景:浏览器页面的前进后退

缺点:插入/删除慢

 循环单向链表:

 循环双向链表:

 


更深入的地方以后会补充,然后文章有不对的地方,希望大家可以指出😊

 

;