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

时间:2011-07-04 20:24:53

标签: c++ stack

我正在尝试向我的'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

有任何帮助吗?谢谢。

4 个答案:

答案 0 :(得分:4)

堆栈设计以仅展示其顶部。就你而言,它没有“底层”。如果要访问集合的两端,请不要使用堆栈! (也许你更喜欢双端队列或列表?)

答案 1 :(得分:3)

您是否考虑过使用其他数据结构?堆栈真的不是为了做到这一点。但是,我不会成为一个没有回答你问题的人。

乍一看,您的代码在逻辑上是合理的,假设您使用链接列表实现堆栈并添加到其中,则会在列表的顶部推送一个元素。你的代码的问题是temp离开while循环时是null。尝试访问空指针是一个错误。

如果你改变你的while条件以使用temp->下面!= 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

答案 2 :(得分:1)

我认为你必须这样做

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

但堆栈是LIFO。这不是:p

答案 3 :(得分:0)

鉴于您使用链接列表作为底层存储,我只需在每次推送到空堆栈时设置底部指针,并在弹出最后一项时随时取消设置。

如果您使用数组(希望是动态的)作为底层存储,您只需索引第一个项目。