打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C++实现两个栈实现一个队列和两个队列实现一个栈

template<typename T>//二个栈实现一个队
class SQueue
{
 public:
  SQueue()
  {}
  ~SQueue()
  {}
  void Appendtail(const T&);
  T Deletehead();
 private:
  LStack<T> s1,s2;
};

template<typename T>
void SQueue<T>::Appendtail(const T&code)
{//入队元素压入栈s1中
 s1.push(code);
}
template<typename T>
T SQueue<T>::Deletehead()
{//若栈s2不空,则栈顶元素出栈,若栈s2空,则先将栈s1的元素一次出栈、入栈到s2中,此时栈s2的栈顶元素相当于队列的对头元素
 if(!s2.isempty())
  return s2.pop();
 else
 {
  while(!s1.isempty())
   s2.push(s1.pop());
  return s2.pop();
 }
}

template<typename T>
class QStack
{
 public:
  QStack()
  {}
  ~QStack()
  {}
  void push(T const &);
  T pop();
 private:
  Queue<T> Q1,Q2;
};

template<typename T>
void QStack<T>::push(T const &e)
{//入栈到非空的队列中,若都空,则任选一个队列,此处选Q2,
 if(!Q1.isempty())
  Q1.Enqueue(e);
 else
  Q2.Enqueue(e);
}
template<typename T>
T QStack<T>::pop()
{//出栈,首先将非空队列中的元素依次出队、入队到另一队列中,直至该非空队列只剩下一个元素,将该元素出队,实现出栈,因此在不做插入删除运算时,至少有一个队列是空的。
 if(Q1.isempty()&&Q2.isempty())
  return NULL;
 if(!Q1.isempty())
 {
  while(Q1.front&&Q1.front!=Q1.rear)
   Q2.Enqueue(Q1.Dequeue());
  return Q1.Dequeue();
 }
 if(!Q2.isempty())
 {
  while(Q2.front&&Q2.front!=Q2.rear)
   Q1.Enqueue(Q2.Dequeue());
  return Q2.Dequeue();
 }
}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C++两个栈实现一个队列和两个队列实现一个栈
模板类的前置声明
英特尔? 软件网络博客 - 中文 ? 多核编程中的条件同步模式
C++写的一个顺序队列类
JS 数据结构与算法_栈 & 队列
队列——用C++模板实现
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服