《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。
算法用两个STL的
s
t
a
c
k
stack
stack实现了一个队列。当向队列中添加元素时,将元素入栈到
n
e
w
E
s
t
newEst
newEst栈中,该栈的栈顶永远是最近添加的元素。当向队列中取元素时,从
o
l
d
E
s
t
oldEst
oldEst栈的栈顶取元素,该栈的栈顶是最久之前添加的元素。当
o
l
d
E
s
t
oldEst
oldEst栈为空时,将
n
e
w
E
s
t
newEst
newEst栈中的每一个元素(从栈顶开始)逐个出栈后并入栈到
o
l
d
E
s
t
oldEst
oldEst栈,这样就保证了
o
l
d
E
s
t
oldEst
oldEst栈中栈顶为较早之前进入队列的元素而栈底是较后进入到队列的元素,这样就保证了队列先进先出的原则。
class MyQueue
{
private:
stack<int> newEst;
stack<int> oldEst;
public:
MyQueue()
{
newEst= stack<int>();
oldEst= stack<int>();
};
void shiftStacks()
{
if (oldEst.empty())
{
while (!newEst.empty())
{
oldEst.push(newEst.top());
oldEst.pop();
}
}
};
//Add value to the queue//
void addValue(int value)
{
newEst.push(value);
};
int size()
{
return newEst.size()+ oldEst.size();
};
// Remove the top element of queue.//
void remove()
{
shiftStacks();
oldEst.top();
};
// Retun the top element of queue.//
int peek()
{
shiftStacks();
return oldEst.top();
};
};