双队列实现栈

来源:互联网 发布:阿里云计算 北京地址 编辑:程序博客网 时间:2024/04/27 05:30

双队列实现栈的主要思路,是一个队列为主队列,另外一个为辅助队列。

每次从栈中pop出一个数,实质就是每次取队尾元素,假设主队列中有N个元素,那么就将前N-1个元素放入辅助队列当中,此时主队列当中只有队尾元素,将其取出,然后再将辅助队列当中的元素全部再放回主队列当中,一次pop动作完成。

栈的push动作实现,就是将元素push进主元素就可以了

实现代码和测试结果如下:

 1 #include <queue> 2 #include <iostream> 3 using namespace std; 4  5 class exQueue 6 { 7 public: 8     exQueue(){}; 9     ~exQueue(){};10     void inQueu( int x);11     void outDeque();12 private:13     queue<int> d1;//主对列14     queue<int> d2;//辅对列15 };16 17 void exQueue::outDeque()18 {19     int temp;20     if(d1.size() == 0 ) return ;21     else22     {23         int size = d1.size();24         for( int i = 0 ; i < size - 1; i++)25         {26             temp = d1.front();27             d1.pop();28             d2.push(temp);29         }30         temp = d1.front();31         d1.pop();32         cout << "The poped number is " << temp <<endl;        33         while( !d2.empty())34         {35             temp = d2.front();36             d2.pop();37             d1.push(temp);38         }        39     }40 }41 void exQueue::inQueu(int x)42 {43     d1.push(x);44 45 }46 int _tmain(int argc, _TCHAR* argv[])47 {48     exQueue obj;49     obj.inQueu(1);50     obj.inQueu(4);51     obj.inQueu(5);52     obj.inQueu(1);53     obj.inQueu(3);54     obj.inQueu(24);55     obj.outDeque();56     obj.outDeque();57     obj.outDeque();58     obj.inQueu(189);59     obj.inQueu(23);60     obj.outDeque();61     obj.outDeque();62     obj.outDeque();63 64     return 0;65 }


原创粉丝点击