如何从堆栈中删除最旧的元素?

时间:2014-10-09 06:30:53

标签: c++ stack

如何从堆栈中删除最旧的元素而不是抛出fullStackException? 关于它没有任何算法吗?

3 个答案:

答案 0 :(得分:2)

典型的堆栈是一种数据结构,它允许推送新条目并查看和弹出最新的推送条目(顶部)。

如果你有一个允许你访问底部条目的实现,那么严格来说,它不是一个堆栈。

但是,如果您自己创建,则可以创建一个LIFO数据结构,其中可以删除最旧的条目。只需确保使用双链表并保持指向底部条目的指针。请注意,这接近std::deque

答案 1 :(得分:1)

如果您可以访问或删除最旧的元素,那就不是了 一堆。如果你想要一个最大尺寸的堆栈,那么 删除最旧的元素,以便在它变得太大时腾出空间, 你可以从std::stack派生出来。标准 使underling容器成为受保护的数据成员,所以 派生类可以访问它。

答案 2 :(得分:0)

你真的把自己与队列混淆了吗?允许移除最旧元素的堆栈可以称为出列。在任何情况下,这个问题都有多个维度

我不希望在(单个)堆栈中删除最旧的元素。但是,您总是可以窥视最古老的元素。通过保持变量。插入第一个元素时定义该变量。什么时候你必须偷看。只需使用该变量。

如果你真的想删除最旧的元素,那么你只能使用堆栈。那么可能你可以使用两个堆栈

来做到这一点

stack1包含所有元素。 Stack2是空的。

<强>伪代码

while(!stack1.empty()){
    stack2.push(stack1.pop());
}
stack2.pop();
while(!stack2.empty()){
    stack1.push();    //Or Instead of 2nd while you can also swap the stack1 and stack2(like swapping two variables)
}

上面的代码实际上更为人所知的是名称使用2个堆栈实现队列。你可能想看看它