码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构(二)之链表

时间:2018-10-15 00:42:25      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:ext   ima   null   是你   alt   分享   src   选择   com   

数组是用连续内存空间,而链表是用零散内存然后通过“指针”串联起来使用。
这样会出现个问题,如果内存有剩余不连续10M的内存空间,你申请10m的数组会oom,但是你申请10m的链表就不会有问题。图片用王争老师的
技术分享图片

常用链表分为三种:单向链表;双向链表;循环链表;双向循环链表;

第一种:单向链表

技术分享图片

第一个节点叫头结点,头结点用来记录链表基地址(也可以叫首地址)
最后一个节点叫尾节点,特殊之处在于他的next不是指向下一节点而是指向空地址null

我们都知道链表增删与查询的时间复杂度 与数组 是相反的
如图,链表的增删只需要修改相邻两个Node的指针地址就ok了。时间复杂度O(1)
技术分享图片

但是单向链表的随机访问时间复杂度是O(n),因为无论如何都需要从首地址依次遍历(双向链表会快一些,比如LinkedList的实现是先判断k与n/2的大小,然后选择是从前往后遍历还是从后往前遍历,最坏是遍历n/2次),才能找到第k个Node.
未完待续。。。

数据结构(二)之链表

标签:ext   ima   null   是你   alt   分享   src   选择   com   

原文地址:https://www.cnblogs.com/jiangxiaoxian/p/9788872.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!