加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

用两个栈达成队列

发布时间:2021-11-20 13:31:01 所属栏目:PHP教程 来源:互联网
导读:用两个栈实现一个队列,队列声明如下,实现它的两个函数appendTail和deleteHead,分别完成在队尾插入结点和在队列头部删除结点的功能 template typename T class CQueue { public: CQueue(); ~CQueue(); void appendTail(const T nods); T deleteHead(); priv

用两个栈实现一个队列,队列声明如下,实现它的两个函数appendTail和deleteHead,分别完成在队尾插入结点和在队列头部删除结点的功能
 
template <typename T>
class CQueue
{
public:
 CQueue();
 ~CQueue();
 
 void appendTail(const T& nods);
 T deleteHead();
 
private:
 stack<T> stack1;
 stack<T> stack2;
};
 
 
 
#include <iostream>
#include <stack>
#include <exception>
using namespace std;
 
template <typename T>
class CQueue
{
public:
 CQueue(){};
 ~CQueue(){};
 
 void appendTail(const T& nods);
 T deleteHead();
 
private:
 stack<T> stack1;
 stack<T> stack2;
};
 
template <typename T>
void CQueue<T>::appendTail(const T& nods)
{
 stack1.push(nods);
}
 
template <typename T>
T CQueue<T>::deleteHead()
{
 if (stack2.size() == 0)
 {
  if (stack1.size() > 0)
  {
   while (stack1.size() > 0)
   {
    T& data = stack1.top();
    stack1.pop();
    stack2.push(data);
   }
   T& ret = stack2.top();
   stack2.pop();
   return ret;
  }
  else
   throw new exception();
 }
 else
 {
  T ret = stack2.top();
  stack2.pop();
  return ret;
 }
}
 
int main()
{
 CQueue<int> myDeque;
 myDeque.appendTail(1);
 myDeque.appendTail(2);
 myDeque.appendTail(3);
 try{
  cout << myDeque.deleteHead() << endl;
  cout << myDeque.deleteHead() << endl;
 } catch(exception ex) {
  cout << "has exception" << endl;
 }
 return 0;
}

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读