CS61B project 1 笔记

本文介绍了Java中队列的两种常见实现方式:带哨兵的双向链表和循环数组。带哨兵链表利用sentinel节点简化头尾判断,循环数组利用位操作提升满队列判断效率并支持动态扩容。同时提到ArrayDeque在头部出队和尾部入队的高效性能,以及可能的缩容策略。
摘要由CSDN通过智能技术生成

队列这种数据结构的物理实现一般是两种,一种是链表,一种是数组。

1. 带哨兵的双向链表

使用一个sentinel来代替之前的head头指针,sentinel的item没有实际的意义,主要关注它的next和pre,初始的时候,链表只有一个sentinel节点,sentinel.next指向自己,sentinel.pre也指向自己。当添加了若干个节点之后,sentinel.next指向头节点,而sentinel.pre则指向尾节点;而同样的,这时头节点的pre不再是NULL而是指向sentinel,尾节点的next也不再是NULL,也是指向sentinel。

不需要标明队头和队尾,在操作的时候想清楚增加哪些指向和删除哪些指向即可。

2. 循环数组

nextLast到达尾端时通过取模可以回到初始位置,通过判断nextLast+1是否等于nextFirst来判断队列满。(其实还有一个空位置

入队操作

pub
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值