栈和队列是STL(C++标准库)里面的两个数据结构。
class MyQueue {
public:
stack<int> stIn;
stack<int> stOut;
MyQueue() {
}
void push(int x) {
stIn.push(x);
}
int pop() {
if(stOut.empty()){
while(!stIn.empty()){
stOut.push(stIn.top());
stIn.pop();
}
}
int result = stOut.top();
stOut.pop();
return result;
}
int peek() {
int result = this->pop();
stOut.push(result);
return result;
}
bool empty() {
return stIn.empty()&&stOut.empty();
}
};
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue* obj = new MyQueue();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->empty();
*/
常用栈操作:push栈顶加入一个元素,pop栈顶弹出一个元素,top读栈顶一个元素,empty判断是否为空栈;主要思路就是先入输入栈,出的时候如果输出栈不空就直接出,否则先将输入栈的全部入输出栈再出
class MyStack {
public:
queue<int> que1;
queue<int> que2;
MyStack() {
}
void push(int x) {
que1.push(x);
}
int pop() {
int size = que1.size();
while(size!=1){
que2.push(que1.front());
que1.pop();
size--;
}
int result = que1.front();
que1.pop();
while(!que2.empty()){
que1.push(que2.front());
que2.pop();
}
return result;
}
int top() {
int result = this->pop();
que1.push(result);
return result;
}
bool empty() {
return que1.empty()&&que2.empty();
}
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/
队列的主要操作front为栈的top操作,主要思想为第一个队列为主要队列,第二个队列为备份队列,出栈的时候que1出到剩一个元素为止,剩下的全部放在que2中,然后出,最后再把que2中的放回que1;注意只用一个队列也能模拟栈,只需将出栈之前的元素再从新入队,将第一个再出队即可;