码迷,mamicode.com
首页 > 其他好文 > 详细

两个栈实现双端队列

时间:2014-09-22 02:10:31      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   for   数据   div   sp   

一个笔试题,当时竟然没想出来,现在实现下

  1 /*
  2 用两个栈实现双端队列
  3 栈s1,s2。
  4 pushback()和popback(),必须在s2为空的情况,把s2的都放s1中
  5 pushfront()和popfront(),必须是在s1为空,把s1的都给放到s2中
  6 */
  7 #include <iostream>
  8 #include <stack>
  9 using namespace std;
 10 template <typename T>
 11 class DequeBy2Stack
 12 {
 13 private:
 14     int maxsize;
 15     stack<T> s1;
 16     stack<T> s2;
 17 public:
 18     DequeBy2Stack(int size):maxsize(size){}
 19     void pushback(T n);
 20     T popback();
 21     void pushfront(T n);
 22     T popfront();
 23     int size();
 24     bool empty();
 25 };
 26 template <typename T>
 27 bool DequeBy2Stack<T>::empty()
 28 {
 29     return s2.empty()&&s1.empty();
 30 }
 31 template <typename T>
 32 int DequeBy2Stack<T>::size()
 33 {
 34     return s1.size()+s2.size();
 35 }
 36 template <typename T>
 37 void DequeBy2Stack<T>::pushback(T n)
 38 {
 39     if(this->size()==maxsize)
 40     {
 41         throw new std::exception("Invalid push");
 42     }
 43     while(!s2.empty())           //必须将s2中的数据都导入到s1中
 44     {
 45         int tmp=s2.top();
 46         s1.push(tmp);
 47         s2.pop();
 48     }
 49     s1.push(n);
 50 }
 51 template <typename T>
 52 T DequeBy2Stack<T>::popback()
 53 {
 54     while(!s2.empty())
 55     {
 56         int tmp=s2.top();
 57         s1.push(tmp);
 58         s2.pop();
 59     }
 60     if(!s1.empty())
 61     {
 62         int tmp=s1.top();
 63         s1.pop();
 64         return tmp;
 65     }
 66     else
 67     {
 68         throw new exception("Invalid popback()");
 69     }
 70 }
 71 template <typename T>
 72 void DequeBy2Stack<T>::pushfront(T n)
 73 {
 74     if(this->size()==maxsize)
 75     {
 76         throw new std::exception("Invalid push");
 77     }
 78     while(!s1.empty())
 79     {
 80         int tmp=s1.top();
 81         s2.push(tmp);
 82         s1.pop();
 83     }
 84     s2.push(n);
 85 }
 86 template <typename T>
 87 T DequeBy2Stack<T>::popfront()
 88 {
 89     while(!s1.empty())
 90     {
 91         int tmp=s1.top();
 92         s2.push(tmp);
 93         s1.pop();
 94     }
 95     if(!s2.empty())
 96     {
 97         int tmp=s2.top();
 98         s2.pop();
 99         return tmp;
100     }
101     else
102     {
103         throw new exception("Invalid popfront");
104     }
105 }
106 
107 int main()
108 {
109     DequeBy2Stack<int> test(8);
110     int n;
111     for(int i=1;i<=8;i++)
112     {
113         test.pushback(i);
114     }
115     test.popback();
116     test.popfront();
117     test.popfront();
118     test.popfront();
119     test.pushfront(100);
120     test.pushfront(101);
121     test.pushback(30);
122     test.pushfront(102);
123     test.popfront();
124     while(!test.empty())
125         cout<<test.popback()<<endl;
126     system("pause");
127 }
128         

 

两个栈实现双端队列

标签:style   blog   color   io   os   for   数据   div   sp   

原文地址:http://www.cnblogs.com/zmlctt/p/3985128.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!