我正在尝试向我的'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
有任何帮助吗?谢谢。
答案 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)
鉴于您使用链接列表作为底层存储,我只需在每次推送到空堆栈时设置底部指针,并在弹出最后一项时随时取消设置。
如果您使用数组(希望是动态的)作为底层存储,您只需索引第一个项目。