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

How can I remove the oldest element from stack?

本文关键字:元素 删除 堆栈      更新时间:2023-10-16

如何从堆栈中删除最旧的元素,而不是抛出fullStackException?这里面没有算法吗?

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

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

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

如果可以访问或删除最旧的元素,则它不是堆栈。不过,如果你想要一个最大大小的堆栈移除最古老的元素以在其变得太大时腾出空间,您可以通过从std::stack派生来实现这一点。标准使下属容器成为受保护的数据成员,因此派生类可以访问它。

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

我不会说在(单个)堆栈中可以删除最旧的元素。但是,您可以随时查看最古老的元素。通过保留一个变量。在插入第一个元素时定义该变量。当你不得不偷看的时候。只需使用该变量。

如果您真的想删除最旧的元素,并且只允许使用stack。然后你可能可以使用两个堆栈

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个堆栈实现队列。你可能想看看它