编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek),对应c++队列的(push,pop,front,empty)。
算法详解见;程序员代码面试指南-算法与数据结构题目最优解-左程云
c++类实现:
#include <iostream>
#include <iterator>
#include <stack>
using namespace std;
class Stack2Que{
public:
Stack2Que()= default;
void que_pop(void);
void que_push(int value);
int que_front(void);
bool que_empty(void);
private:
stack<int> stack_push,stack_pop;
};
void Stack2Que::que_push(int value){
if(stack_pop.empty())
stack_push.push(value);
else
{
while(!stack_pop.empty())
{
int i=stack_pop.top();
stack_pop.pop();
stack_push.push(i);
}
stack_push.push(value);
}
}
void Stack2Que::que_pop(void){
if(!stack_pop.empty())
stack_pop.pop();
else if(!stack_push.empty())
{
while(!stack_push.empty())
{
auto val = stack_push.top();
stack_pop.push(val);
stack_push.pop();
}
stack_pop.pop();
}
else cout<<"empty!\n"<<endl;
}
int Stack2Que::que_front(void){
if(stack_pop.empty() && stack_push.empty())
cout << "empty!\n"<<endl;
else if(!stack_pop.empty())
return stack_pop.top();
else
{
while(!stack_push.empty())
{
int val = stack_push.top();
stack_push.pop();
stack_pop.push(val);
}
return stack_pop.top();
}
}
代码有待于优化为类模板;