您的位置:首页 > 其它

两个栈实现一个队列

2016-04-25 18:37 267 查看
栈的特点:先进后出
队列特点:先进先出
//实现两个栈实现一个队列
//每次都push到_s1中,pop从_s2,提高效率(每次不用互相倒栈)
#pragma once
#include<iostream>
#include<stack>
#include<queue>
#include<assert.h>
using namespace std;
template<class T>
class Queue
{
public:
void Push(const T& x)
{
_s1.push(x);
}
void Pop()
{
if (_s2.empty())
{
while (!_s1.empty())
{
_s2.push(_s1.top());
_s1.pop();
}
}
//断言当_s2为空时,不执行 (库中实现_s2.pop()也已断言,实不实现都行!!!)防止自己实现的栈出错
assert(!_s2.empty());
_s2.pop();
}
bool Empty()
{
return _s1.empty() && _s2.empty();
}
int Size()
{
return _s1.size() + _s2.size();
}
T& Front()
{
if (_s2.empty())
{
while (!_s1.empty())
{
_s2.push(_s1.top());
_s1.pop();
}
}
assert(!_s2.empty());
return _s2.top();
}
T& Back()
{
if (_s1.empty())
{
while (!_s2.empty())
{
_s1.push(_s2.top());
_s2.pop();
}
}
assert(_s1.empty());
return _s1.top();
}
protected:
stack<T> _s1;
stack<T> _s2;
};
void Test1()
{
Queue<int> q1;
q1.Push(1);
q1.Push(2);
q1.Push(3);
q1.Push(4);
q1.Push(5);
q1.Push(6);
q1.Pop();
q1.Pop();
q1.Pop();
q1.Pop();
q1.Pop();
q1.Pop();
//q1.Pop();
//cout << q1.Front() << endl;
//cout << q1.Back() << endl;
//cout << q1.Empty() << endl;
cout << q1.Size() << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  栈的应用