双队列实现栈的主要思路,是一个队列为主队列,另外一个为辅助队列。
每次从栈中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 else 22 { 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 }