一、两个栈实现一个队列
设两个栈分别为stack1和stack2,stack1主要负责“进入”,模拟的是“队尾”;stack2主要负责“弹出”,模拟的是“队头”。具体思路如下:
1、对于“数据入队”操作,只需要将数据压入stack1即可
2、对于“数据出队”操作,若stack2非空,直接弹出栈顶元素;若stack2是空,将stack1中所有元素弹入stack2之后,弹出stack2栈顶元素
实现代码如下:
1 class Solution 2 { 3 public: 4 void push(int node) { 5 stack1.push(node); 6 } 7 8 int pop() { 9 int a; 10 if (stack2.empty()) 11 { 12 while (!stack1.empty()) 13 { 14 a = stack1.top(); 15 stack1.pop(); 16 stack2.push(a); 17 } 18 } 19 a = stack2.top(); 20 stack2.pop(); 21 return a; 22 } 23 24 private: 25 stack<int> stack1; 26 stack<int> stack2; 27 };