//题目描述
//用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路:必须知道,stack<> 是先进后出的,queue<>是先进先出的; 所以按照题目要求,例如:我们按次序将1、2、3、4、5分别push进stack中,我们希望得到如图:
这样就达到了题目要求:先进先出。但是现在问题是一个stack无法满足如图需求。我们考虑将1234已经压入stack1,并且满足”先进先出”。现在准备加入5;流程如下图:
1 //题目描述 2 //用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 3 #include<iostream> 4 #include<stack> 5 6 using namespace std; 7 8 stack<int> stack1; 9 stack<int> stack2; 10 // |------------ 11 // | 2 3 1 3 5 0 12 // |------------ 13 void push(int node) 14 { 15 //<1> 将stack1的元素备份到 stack2 16 const int stack1_size = stack1.size(); 17 for (int i = 0; i < stack1_size; i++) 18 { 19 int temp = stack1.top(); 20 stack1.pop(); 21 stack2.push(temp); 22 } 23 stack1.push(node); // push 操作 24 // <2> 从stack2恢复元素 25 const int stack2_size = stack2.size(); 26 for (int m = 0; m < stack2_size; m++) 27 { 28 int temp = stack2.top(); 29 stack2.pop();//这里顺便把stack2清空了 30 stack1.push(temp); 31 } 32 } 33 34 int pop() { 35 int temp = stack1.top(); 36 stack1.pop(); 37 return temp; 38 } 39 40 int main() 41 { 42 push(1); 43 push(2); 44 push(3); 45 push(4); 46 push(5); 47 48 cout << pop() << endl; //1 49 cout << pop() << endl; //2 50 cout << pop() << endl; //3 51 cout << pop() << endl; //4 52 cout << pop() << endl; //5 53 return 1; 54 }