用两个栈实现队列
template<class T>
class CQueue
{
public:
CQueue(){}
int size()
{
return s1.size()+s2.size();
}
bool empty()
{
return size()==0;
}
void push(T val)
{
s1.push(val);
}
void pop()
{
assert(!empty());
if(s2.empty())
{
while(!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
}
s2.pop();
}
T top()
{
assert(!empty());
if(!s2.empty())
return s2.top();
while(!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
return s2.top();
}
private:
stack<T>s1;
stack<T>s2;
};
设计包含min的栈
template<class T>
class StackWithMin
{
public:
void push(T val)
{
data.push(val);
if(minData.empty()||minData.top()>val)
minData.push(val);
else
minData.push(minData.top());
}
void pop()
{
assert(!data.empty());
data.pop();
minData.pop();
}
T top()
{
assert(!data.empty())