队列这种数据结构的物理实现一般是两种,一种是链表,一种是数组。
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