《数据结构与算法》2-链表

上一节我们总结了一下数组,数组的特性就是要吧数据存储在一块连续的存储块内。所以当我们知道了第一个数据的内存地址,就可以随机访问其他的数据。访问的事件复杂度是O(1)。但是数组的缺陷也比较明显:

  • 首先物理内存必须是连续的,数据量大的时候难以保证存储够用
  • 插入删除操作相对复杂,需要做数据的复制移位。

链表的出现就解决了上述问题。首先链表的基本元素是节点:Node。Node数据结构分两部分:

  • 1-数据域,用来保存数据
  • 2-指向下一个数据的指针。

上面的指针给了链表的极大扩展性:

  • 链表不需要物理存储的连续性,因为单个节点可以分开保存,只要有指针指向它的位置就能保证链表的顺序。
  • 链表的删除插入操作比较简单,比如A->B->C的链表中删除B,只要把A的下一节点指针指向C,B的指针置空,就能删除B节点。

但是链表也有自身的缺陷:

  • 首先,因为多了指针部分,单节点的内存占用更大了
  • 访问指定下标的数据变得困难,只能从头遍历链表到达指定位置,不能像数组可以做到随机访问。

上面的总结都是基于普通链表,即单链表(只有一个数据指针),有头节点(head)和尾节点(tail)。头节点指向第一个节点,尾节点指向最后一个节点,

判断单链表是否为空:head = tail,尾节点tail的指针为null&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值