两个栈模拟队列,两个队列模拟栈
来源:互联网 发布:雍正篡位还是继位 知乎 编辑:程序博客网 时间:2024/04/30 05:16
//栈 -> 后进先出
template<class T>
class MyQueue
{
public:
void Push(T t) //插入不用判断,直接插入s1
{
s1.push(t);
}
T& Front() //取队头数据
{
if (s2.size() != 0) //如果s2 有数据,直接取
{
return s2.top();
}
else //s2没有数据,则把s1的数据全部插入s2(数据逆序),再取
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
return s2.top();
}
}
void Pop()
{
if (s2.size() != 0)
{
s2.pop();
}
else
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
s2.pop();
}
}
protected:
stack<T> s1;
stack<T> s2;
};
//2.两个队列模拟一个栈
template<class T>
class MyStack
{
public:
void Push(T t) //数据直接插入q1
{
q1.push(t);
}
T Top() //取栈顶数据
{
assert(q1.empty() || q2.empty());
if (q1.size() == 1)
{
return q1.front();
}
if (q2.size() == 1)
{
return q2.front();
}
T tmp;
if (!q1.empty() && q2.empty()) //q2 为空,则把q1的数据插入到q2,吧q1最后一个数据返回
{
while (!q1.empty())
{
q2.push(q1.front());
q1.pop();
if (q1.size() == 1)
{
tmp = q1.front();
}
}
}
return tmp;
if (q1.empty() && !q2.empty())//q1 为空,则把q2的数据插入到q1,吧q2最后一个数据返回
{
while (!q2.empty())
{
q1.push(q2.front());
q2.pop();
if (q2.size() == 1)
{
tmp = q2.front();
}
}
}
return tmp;
}
void Pop()
{
if (!q1.empty() && q2.empty()) //q2 为空,则把q1的数据插入到q2,吧q1最后一个数据返回
{
while (!q1.empty())
{
q2.push(q1.front());
q1.pop();
if (q1.size() == 1)
{
q1.pop();
}
}
}
if (q1.empty() && !q2.empty())//q1 为空,则把q2的数据插入到q1,吧q2最后一个数据出栈
{
while (!q2.empty())
{
q1.push(q2.front());
q2.pop();
if (q2.size() == 1)
{
q2.pop();
}
}
}
}
protected:
queue<T> q1;
queue<T> q2;
};
//队列 -> 先进先出
template<class T>
class MyQueue
{
public:
void Push(T t) //插入不用判断,直接插入s1
{
s1.push(t);
}
T& Front() //取队头数据
{
if (s2.size() != 0) //如果s2 有数据,直接取
{
return s2.top();
}
else //s2没有数据,则把s1的数据全部插入s2(数据逆序),再取
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
return s2.top();
}
}
void Pop()
{
if (s2.size() != 0)
{
s2.pop();
}
else
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
s2.pop();
}
}
protected:
stack<T> s1;
stack<T> s2;
};
//2.两个队列模拟一个栈
template<class T>
class MyStack
{
public:
void Push(T t) //数据直接插入q1
{
q1.push(t);
}
T Top() //取栈顶数据
{
assert(q1.empty() || q2.empty());
if (q1.size() == 1)
{
return q1.front();
}
if (q2.size() == 1)
{
return q2.front();
}
T tmp;
if (!q1.empty() && q2.empty()) //q2 为空,则把q1的数据插入到q2,吧q1最后一个数据返回
{
while (!q1.empty())
{
q2.push(q1.front());
q1.pop();
if (q1.size() == 1)
{
tmp = q1.front();
}
}
}
return tmp;
if (q1.empty() && !q2.empty())//q1 为空,则把q2的数据插入到q1,吧q2最后一个数据返回
{
while (!q2.empty())
{
q1.push(q2.front());
q2.pop();
if (q2.size() == 1)
{
tmp = q2.front();
}
}
}
return tmp;
}
void Pop()
{
if (!q1.empty() && q2.empty()) //q2 为空,则把q1的数据插入到q2,吧q1最后一个数据返回
{
while (!q1.empty())
{
q2.push(q1.front());
q1.pop();
if (q1.size() == 1)
{
q1.pop();
}
}
}
if (q1.empty() && !q2.empty())//q1 为空,则把q2的数据插入到q1,吧q2最后一个数据出栈
{
while (!q2.empty())
{
q1.push(q2.front());
q2.pop();
if (q2.size() == 1)
{
q2.pop();
}
}
}
}
protected:
queue<T> q1;
queue<T> q2;
};
阅读全文
0 0
- 两个队列模拟栈
- 两个栈模拟队列
- 两个队列模拟栈
- 7 两个栈模拟队列,两个队列模拟栈
- 两个栈模拟一个队列/两个队列模拟一个栈
- 两个栈模拟队列,两个队列模拟栈
- 两个栈模拟队列,两个队列模拟栈
- 使用两个栈模拟队列
- 两个栈模拟一个队列
- 两个队列模拟一个栈
- 用两个栈模拟队列
- 两个栈来模拟队列
- 两个队列模拟一个栈
- 利用两个栈模拟队列
- 两个队列模拟一个栈
- 两个栈模拟一个队列
- 两个队列模拟一个栈
- 两个栈模拟一个队列
- 【笔记】JSP结构
- tcp 滑动窗口简单理解
- 定点与浮点
- 观察者模式
- Spring五个事务隔离级别和七个事务传播行为
- 两个栈模拟队列,两个队列模拟栈
- hadoop2.7.3源码解析之datanode注册和心跳机制
- 怎样让 表中的数据 <a href='aa'>Game</a> 原本的显示在网页中
- Linux"和$()的区别以及调研 eval命令
- 近十年量化交易领域最重要的十本参考书推荐!重要!
- python-数据库
- Android Wi-Fi 设置wifi Only 11a、b、g、n 扫描(以QCOM为平台)
- 1039. Course List for Student (25)
- g++ 64位版