双端队列的问题
public E getFront(){ if(isEmpty()) throw new IllegalArgumentException("Queue is empty."); return data[front]; } // 因为是双端队列,我们也有一个 getLast 的方法,来获取队尾元素的值 public E getLast(){ if(isEmpty()) throw new IllegalArgumentException("Queue is empty."); // 因为 tail 指向的是队尾元素的下一个位置,我们需要计算一下真正队尾元素的索引 int index = tail == 0 ? data.length - 1 : tail - 1; return data[index]; }
对于getLast和getFront,我有些不理解,这里front和tail不都应该指向对应的元素位置吗,为什么这里需要判断呢?
正在回答
tail 并不是指向最后一个元素,而是指向最后一个元素的下一个位置。在课程之前所实现的循环队列中也是如此,再回顾一下课程之前的实现?
所以,要想找最后一个元素,要看 tail 前一个位置的元素,即 tail - 1 位置的元素。但如果 tail 为 0,tail - 1 为负数,此时,前一个位置的元素实际上在 data.length - 1 的位置,所以要做一个判断。
继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星