我正在研究数据结构,遇到了一篇名为Deque Data Structure的文章。
本文附上甲板的实现和理论。
我主要写优点,一时不太清楚,即getRear()函数;
int Deque::getRear() {
if (isEmpty() || rear < 0) {
cout << " Deque is Empty"<< endl;
return -1;
}
return *(arr+rear);
}
问题到底是什么?
1.不明白为什么在这个函数中,检查空的时候,rear<0被赋值,没有它可以吗?
原则上,大致上,我理解为什么会这样,但是如果你从另一边看, 为什么不在构造函数中立即属性rear = -1,而不是0?
我还可以参考 DeleteRear(); 函数,其中当最后一个元素被删除时,rear=-1 和 front=-1。但是我很困惑,有时,在我的判断中,最好听听别人的意见。
这个问题
|| rear < 0
不可行,因为如果它不为空,那么后面的索引总是>=0
。这通常作为过度控制而发生。该值rear == -1
仅出现在空队列状态中。也就是说,您可以安全地删除此检查,因为它不会更改逻辑。空标志只进行索引检查
front == -1
。该值rear
可能未定义。并且值就是这样写在构造函数中的rear = 0
。这个赋值不会改变程序的逻辑。正如avp所说,变量集没有很好地选择。由于无法使用
[0 .. size-1]
. 我们想出了第一个索引的键值-1,它并没有真正影响程序的可读性和可执行性。使用第一个和数量的索引会更方便。检查是否为空
count == 0
,最后一个条目的索引可以这样计算:rear = (front + count - 1) % size ;