如何从堆栈中删除最旧的元素而不是抛出fullStackException? 关于它没有任何算法吗?
答案 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个堆栈实现队列。你可能想看看它