两个栈组成的队列
#include <iostream>
#include <stack>
using namespace std;
class TwoStacksQueue {
private:
stack<int> stackPush;
stack<int> stackPop;
public:
TwoStacksQueue() {};
~TwoStacksQueue() {};
void push(int pushInt);
void pop();
int front();
};
void TwoStacksQueue::push(int pushInt) {
stackPush.push(pushInt);
}
void TwoStacksQueue::pop() {
if (stackPop.empty() && stackPush.empty()) {
throw runtime_error("Your queue is empty.");
}
if (stackPop.empty()) {
while (!stackPush.empty()) {
int value = stackPush.top();
stackPush.pop();
stackPop.push(value);
}
}
stackPop.pop();
}
int TwoStacksQueue::front() {
if (stackPop.empty() && stackPush.empty()) {
throw runtime_error("Your queue is empty.");
}
if(stackPop.empty()) {
while (!stackPush.empty()) {
int value = stackPush.top();
stackPush.pop();
stackPop.push(value);
}
}
return stackPop.top();
}
int main()
{
TwoStacksQueue test;
test.push(10);
test.push(20);
test.push(30);
cout << test.front() << endl; // 10
test.pop();
cout << test.front() << endl; // 20
test.pop();
cout << test.front() << endl; // 30
test.pop();
return 0;
}
栈可以改变元素出入顺序,两个栈正好可以抵消,实现类似队列先进先出的功能:
- stackPop为空的时候才能往栈内压;
- 若向stackPop内压元素,则一次性把stackPush中的元素压完。