两个队列实现一个栈
入栈时,直接push入queue1中
出栈时,先将queue1中的元素除最后一个元素外依次pop出队列,并push入队列queue2中,将留在queue1中的最后一个元素出队列即为出栈元素,最后还要把queue2中的元素再次push进queue1中
具体代码如下:
template <typename T>
class DouQue_Stack
{
public:
DouQue_Stack()
{}
~DouQue_Stack()
{}
void Stack_push(const T& node)
{
queue1.push(node);
}
void Stack_pop()
{
if (!queue2.empty())
{
queue2.pop();
}
if (!queue1.empty())
{
int i = queue1.size();
while (i > 1)
{
queue2.push(queue1.front());
queue1.pop();
i--;
}
queue1.pop();
int ii = queue2.size();
while (ii > 0)
{
queue1.push(queue2.front());
queue2.pop();
ii--;
}
}
}
T Stack_top()
{
T node1;
if (!queue2.empty())
{
node1 = queue2.front();
return node1;
}
if (!queue1.empty())
{
int i = queue1.size();
while (i > 1)
{
queue2.push(queue1.front());
queue1.pop();
i--;
}
node1 = queue1.front();
queue2.push(queue1.front());
queue1.pop();
int ii = queue2.size();
while (ii > 0)
{
queue1.push(queue2.front());
queue2.pop();
ii--;
}
return node1;
}
}
private:
queue<T> queue1;
queue<T> queue2;
};
两个栈实现一个队列
入队时,直接push入stack1中
出队时,判断stack2是否为空,如果stack2为空,则将stack1中的元素倒入stack2中然后pop出stack2,否则直接pop出stack2中的元素
具体代码如下:
template <typename T>
class DouSta_Queue
{
public:
DouSta_Queue()
{}
~DouSta_Queue()
{}
void Queue_push(const T& node)
{
stack1.push(node);
}
void Queue_pop()
{
if (!stack2.empty())
{
stack2.pop();
}
if (!stack1.empty())
{
int i = stack1.size();
while (i > 0)
{
stack2.push(stack1.top());
stack1.pop();
i--;
}
stack2.pop();
}
}
T Queue_top()
{
T node1;
if (!stack2.empty())
{
node1 = stack2.top();
return node1;
}
if (!stack1.empty())
{
int i = stack1.size();
while (i > 0)
{
stack2.push(stack1.top());
stack1.pop();
i--;
}
node1 = stack2.top();
return node1;
}
}
private:
stack<T> stack1;
stack<T> stack2;
};