Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++中返回栈的底层元素?_C++_Stack - Fatal编程技术网

如何在C++中返回栈的底层元素?

如何在C++中返回栈的底层元素?,c++,stack,C++,Stack,我正在尝试向我的“stack”类添加一个额外的方法,该方法将返回堆栈中的底部元素。然而我只是不太明白这件事。这是我目前在stack.cpp中的代码,但它不能正常工作: bool Stack::bot(StackItemType& stackBottom){ if (isEmpty()) return false; StackItems *temp = top; while (temp != NULL) { temp = temp->below; }

我正在尝试向我的“stack”类添加一个额外的方法,该方法将返回堆栈中的底部元素。然而我只是不太明白这件事。这是我目前在stack.cpp中的代码,但它不能正常工作:

bool Stack::bot(StackItemType& stackBottom){
  if (isEmpty()) return false;

  StackItems *temp = top;
  while (temp != NULL) {
    temp = temp->below;
  }

  stackBottom = temp->item;
  return true;
} // end bottom
有什么帮助吗?谢谢。

堆栈设计为仅暴露其顶部。就你而言,它没有底部。如果要访问集合的两端,请不要使用堆栈!也许您更喜欢双端队列或列表?

堆栈设计为只暴露其顶部。就你而言,它没有底部。如果要访问集合的两端,请不要使用堆栈!也许您更喜欢双端队列或列表?

我想您必须这样做

StackItems *temp = top;
while (temp->below != NULL) {
   temp = temp->below;
 }
但堆叠是后进先出。这里不是:我想你必须这样做

StackItems *temp = top;
while (temp->below != NULL) {
   temp = temp->below;
 }

但堆叠是后进先出。这里不是:p

如果您使用链表作为下划线存储,我只需在每次推到空堆栈时设置底部指针,并在每次弹出最后一项时取消设置


如果您使用数组作为下划线存储,您只需索引第一项。

如果您使用链表作为下划线存储,我只需在每次推到空堆栈时设置底部指针,并在弹出最后一项时将其取消设置


如果使用数组作为下划线存储,则只需对第一项进行索引。

是否考虑使用其他数据结构。堆栈真的不应该这样做。然而,我不会成为一个傻瓜,不会回答你们的问题

乍一看,您的代码在逻辑上是合理的,假设您正在用一个链表实现堆栈,并向其中添加一个位于列表顶部的元素。代码的问题在于,temp在离开while循环时为null。试图访问空指针是一个错误

如果您将while条件更改为使用temp->below!=NULL,则temp将在离开while循环之前指向有效元素

bool Stack::bot(StackItemType& stackBottom){
  if (isEmpty()) return false;

  StackItems *temp = top;
  while (temp->below != NULL) {
    temp = temp->below;
  }

  stackBottom = temp->item;
  return true;
} // end bottom

您是否考虑过使用其他数据结构。堆栈真的不应该这样做。然而,我不会成为一个傻瓜,不会回答你们的问题

乍一看,您的代码在逻辑上是合理的,假设您正在用一个链表实现堆栈,并向其中添加一个位于列表顶部的元素。代码的问题在于,temp在离开while循环时为null。试图访问空指针是一个错误

如果您将while条件更改为使用temp->below!=NULL,则temp将在离开while循环之前指向有效元素

bool Stack::bot(StackItemType& stackBottom){
  if (isEmpty()) return false;

  StackItems *temp = top;
  while (temp->below != NULL) {
    temp = temp->below;
  }

  stackBottom = temp->item;
  return true;
} // end bottom

虽然从您的代码中可以清楚地看到,您正在使用链表作为底层存储体系结构,但这样说会有所帮助。虽然从您的代码中可以清楚地看到,您正在使用链表作为底层存储体系结构,但这样说会有所帮助。不-堆栈是后进先出,而不是FIFONo-堆栈是后进先出,虽然这是真的,但这个问题有着家庭作业的味道——愚蠢的要求,一个明显的自制实现,一个可能让初学者难倒的问题;希瑟在这件事上可能别无选择。@dmckee:那太不幸了。在计算机科学中,术语堆栈实际上是一种被普遍接受的单端数据结构,没有任何明智的方法可以找到它的底部而不扔掉其他所有东西。公平地说,它可能只是一个术语问题。如果您想象一个堆栈向下生长,那么底部将是添加到其中的最新项目的合适名称。您无法从问题中分辨两端是可访问的还是只有一个。@tinman:很好,可能是这样,但这意味着当前容器没有方法访问其端。。。嗯,可能是……虽然这是真的,但这个问题有点像家庭作业的愚蠢要求,显然是一个自制的实现,而且这个问题可能会让初学者感到困惑;希瑟在这件事上可能别无选择。@dmckee:那太不幸了。在计算机科学中,术语堆栈实际上是一种被普遍接受的单端数据结构,没有任何明智的方法可以找到它的底部而不扔掉其他所有东西。公平地说,它可能只是一个术语问题。如果您想象一个堆栈向下生长,那么底部将是添加到其中的最新项目的合适名称。您无法从问题中分辨两端是可访问的还是只有一个。@tinman:很好,可能是这样,但这意味着当前容器没有方法访问其端。。。嗯,可能是。。。