题目一
由两个栈组成的队列
【题目】
编写一个类,用两个栈实现队列,支持队列的基本操作(push、pop、front)。
注意点:
1、如果stack_push要往stack_pop中压入数据,必须一次性把stack_push中的数据全部压入。
2、如果stack_pop不为空,stack_push绝对不能向stack_pop中压入数据。
template<typename T>
class queue
{
private:
stack<T> stack_push;
stack<T> stack_pop;
public:
void push(T num)
{
stack_push.push(num);
}
int pop()
{
if (stack_push.empty() && stack_pop.empty())
{
cout << "no elem" << endl;
}
else if (stack_pop.empty())
{
while (!stack_push.empty())
{
stack_pop.push(stack_push.top());
stack_push.pop();
}
}
stack_pop.pop();
}
int front()
{
if (stack_push.empty() && stack_pop.empty())
{
cout << "no elem" << endl;
}
else if (stack_pop.empty())
{
while (!stack_push.empty())
{
stack_pop.push(stack_push.top());
stack_push.pop();
}
}
return stack_pop.top();
}
bool empty()
{
return stack_push.empty() && stack_pop.empty();
}
};
题目二
由两个队列组成的栈
【题目】
编写一个类,用两个队列实现栈,支持栈的基本操作(push、pop、top)。
每次对stack的最上面元素进行操作(top或pop)都将queue除了最后一个元素的值都一次送入tmp队列,如果是top操作那么取该值后送入tmp队列,否则直接弹出,最后都要把tmp队列中的值重新送回queue。
template<typename T>
class stack
{
private:
queue<T> queue;
queue<T> tmp;
public:
void push(T num)
{
queue.push(num);
}
void pop()
{
if (queue.empty())
{
cout << "no elem" << endl;
}
while (queue.size() > 1)
{
tmp.push(queue.front());
queue.pop();
}
queue.pop();
while (!tmp.empty())
{
queue.push(tmp.front());
tmp.pop();
}
}
T top()
{
if (queue.empty())
{
cout << "no elem" << endl;
}
while (queue.size() > 1)
{
tmp.push(queue.front());
queue.pop();
}
T res = queue.front();
tmp.push(queue.front());
queue.pop();
while (!tmp.empty())
{
queue.push(tmp.front());
tmp.pop();
}
return res;
}
bool empty()
{
return queue.empty();
}
};
参考:
《程序员代码面试指南》