为什么队列中的后部元素指向空
why rear element in a queue points to null
队列的链表实现中,为什么队列中最后插入的元素指向null?在堆栈的链表实现中,为什么第一个元素(首先插入)指向空值?
我问这个问题的原因是我在 java 中使用链表实现堆栈和队列,如果存在 null 则实现更改让我们说在队列的前面或者 null 存在于堆栈顶部的下一个。
两种结构都是链表。每个节点都有一个指向下一个节点的 next
指针。当没有下一个节点时,我们需要决定将哪个值放在那里。在那里存储空指针值很方便,因为该值永远不会与真正的指针混淆。
这个空指针对于将节点标识为最后一个节点通常很重要。
例如,堆栈实现中的 pop
方法需要处理 last(底部)元素被移除时发生的情况。 pop
将按照以下方式实施:
if (top == nullptr) return nullptr; // Stack is empty
Node * node = top;
top = top->next;
free(node);
因此,由于空堆栈由 top === nullptr
标识,因此将堆栈底部元素的 next
指针设置为 nullptr
很重要。只有这样才能正确设置去掉底部元素后的空条件。
如果数据结构维护对最后一个节点的引用(如 *rear
在队列的情况下),那么理论上我们可以保留最后一个节点的 next
指针的值未定义(即任何值)。然后我们可以通过将节点的地址与 rear
指针进行比较来将节点识别为最后一个节点,而无需查看该(未定义,因此不安全)next
指针。但更好的做法是在那里存储一个显式的空指针,这会导致(更)优雅的代码,并在代码有错误跟随最后一个节点的 next
的错误时导致更好的错误报告指针。
队列的链表实现中,为什么队列中最后插入的元素指向null?在堆栈的链表实现中,为什么第一个元素(首先插入)指向空值?
我问这个问题的原因是我在 java 中使用链表实现堆栈和队列,如果存在 null 则实现更改让我们说在队列的前面或者 null 存在于堆栈顶部的下一个。
两种结构都是链表。每个节点都有一个指向下一个节点的 next
指针。当没有下一个节点时,我们需要决定将哪个值放在那里。在那里存储空指针值很方便,因为该值永远不会与真正的指针混淆。
这个空指针对于将节点标识为最后一个节点通常很重要。
例如,堆栈实现中的 pop
方法需要处理 last(底部)元素被移除时发生的情况。 pop
将按照以下方式实施:
if (top == nullptr) return nullptr; // Stack is empty
Node * node = top;
top = top->next;
free(node);
因此,由于空堆栈由 top === nullptr
标识,因此将堆栈底部元素的 next
指针设置为 nullptr
很重要。只有这样才能正确设置去掉底部元素后的空条件。
如果数据结构维护对最后一个节点的引用(如 *rear
在队列的情况下),那么理论上我们可以保留最后一个节点的 next
指针的值未定义(即任何值)。然后我们可以通过将节点的地址与 rear
指针进行比较来将节点识别为最后一个节点,而无需查看该(未定义,因此不安全)next
指针。但更好的做法是在那里存储一个显式的空指针,这会导致(更)优雅的代码,并在代码有错误跟随最后一个节点的 next
的错误时导致更好的错误报告指针。