如何从堆栈中删除最旧的元素
How can I remove the oldest element from stack?
如何从堆栈中删除最旧的元素,而不是抛出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个堆栈实现队列。你可能想看看它
相关文章:
- C++如何通过用户输入删除列表元素
- 使用函数"remove"删除重复元素
- 如何通过 getter 函数删除矢量的元素?
- 从控制台中删除最后打印的元素
- 如何从存储在std::映射中的std::集中删除元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 删除列表中的第n个元素
- 从矢量中删除元素后出现隔离错误
- 删除映射和分割错误中的一个过去结束元素
- 如何使用remove_if从矢量中删除元素
- 如何从使用 for 循环中的矢量大小的矢量中删除元素
- 从矢量中删除空元素
- 关于比较两个无序数组并删除 a[] 中可以在 b[] 中找到的元素的问题
- 删除指针数组 (C++) 中的元素
- 删除列表 c++ 中的最后 3 个元素
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- 为什么通过 vector<reference_wrapper> 的元素删除引用的值<T>不会使向量无效?
- 从std::multiset的第i个元素删除到末尾
- 删除 [] 是否等于每个元素删除.C++
- std::列出元素删除后节点的内存回收