用两个栈实现队列
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());
return data.top();
}
T min()
{
assert(!minData.empty());
return minData.top();
}
private:
stack<T>data; //栈数据成员
stack<T>minData; //最小的元素
};
写一个算法将栈的元素升序排列。栈的实现未知,算法只能借助栈完成可使用的函数包括有push、pop、top、empty
template<typename T>
stack<T> sort(stack<T>s)
{
stack<T>r;
while(!s.empty())
{
int tmp=s.top();
s.pop();
while(!r.empty()&&r.top()>tmp)
{
s.push(r.top());
r.pop();
}
r.push(tmp);
}
}