数据结构与算法之链表

链表

链表 VS 数组

特点

  • 数组 : 内存连续, 更好利用局部性原理;内存空间必须一次性分配够,所以说数组如果要扩容,需要重新分配一块更大的空间,再把数据全部复制过去,有界
  • 链表 : 不存在数组的扩容问题, 空间不连续,你无法根据一个索引算出对应元素的地址,所以不能随机访问; 需要前后元素位置的指针,会消耗相对更多的储存空间

优缺点:

  • 查询: 数组 O(1), 有序时可以用二分查找;
  • 删除: 链表只需要移动指针 O(1) ,数组的话删除元素需要移动后续的元素 O(N)

更多技术文章、面试资料、工具教程,还请移步:http://www.javatiku.cn/

扩缩容

简单说下编程语言 java, golang中 LinkList的扩缩容的策略。

java 中扩容,每次扩容新增原先容量的 1/2

 int newCapacity = oldCapacity + (oldCapacity >> 1);

这个就不介绍了。重点说下双向链表。

双向链表

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。

双向链表克服了单链表中访问某个节点前驱节点(插入,删除操作时),只能从头遍历的问题。

缺点是: 多了1倍的额外的指针空间大小。

typedef int Value
typedef struct Entry{
    struct Entry *next,*prev;
    Value value;
}DoubleLink;

更多技术文章、面试资料、工具教程,还请移步:http://www.javatiku.cn/

应用场景

  • mysql B+树 叶子节点就使用 双向链表,方便 age<10 类似条件查询,或者 倒序查询 如 order by desc ,从后向前遍历数据
  • Java AQS 中的等待队列, 是一个双端 双向链表 的结构 (FIFO 结构)

循环链表

最后一个节点指针指向头节点的链表

#数据结构算法##Java##学习路径#
全部评论
通过大佬发的,我有那么一丝丝的懂了
点赞 回复 分享
发布于 2022-01-12 20:24

相关推荐

压力很大,面试官全程高压,问的问题不难,但是没有任何反馈,很慌张,也无算法。实习问了20分钟,一直问我你们做的有什么用,总时长一小时1.学校都有什么课程2.spring的ioc原理以及优点3.除了解耦还知道什么?4.springboot与spring区别,二者的源码看过没?Tomcat了解嘛?有没有具体看过5.spring的bean,面试官一直在重复一个思想问我懂不懂,完全没听过6.mybatis是干什么的?ibatis用过没?平常怎么写SQL?完全不写嘛?7.设计一个分布式双十一秒杀系统(前端,网关,缓存,数据库防超卖全设计)8.怎么做限流9.缓存与数据库一致性,你做异步要用户等你嘛?10.负载均衡怎么做11.多数据中心还是单数据中心,如果出现没卖完怎么做(到这完全不会了,面试官直接说换个话题吧)12.平常读书吗?13.上过哲学课嘛?14.兴趣爱好有没有15.对ai的看法16.来深圳有问题嘛?17.为什么不考研18.上大学带给了你什么?你提升在哪里,有没有具体的例子?反问:1.现在手机都有应用市场,应用宝怎么盈利?除了手机应用市场还是有人用,现在在做跨端,微软都有合作,之后会进军mac,主要做游戏,腾讯本身就是游戏大户。2.面试表现?整体评价一下会给到反馈。面完直接变HR面,今天HR面后,已经转为录用评估了,来牛客许个愿,暑期现在还没什么面试,希望能拿个offer之后再考虑要不要留在手子吧。
nunuking:三面压力这么大吗,面试的会议约了多长时间呀
面试问题记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务