先盘点一下stack和queue对应的API:
stack:
push()
: 将元素压入栈顶pop()
: 弹出栈顶元素top()
: 获取栈顶元素empty()
: 判断栈是否为空size()
: 获取栈的大小
queue:
front()
: 获取队头元素back()
: 获取队尾元素peek()
: 获取队头元素empty()
: 判断队列是否为空size()
: 获取队列的大小
232.用栈实现队列
我的代码:
class MyQueue {
public:
MyQueue() {
}
void push(int x) {
stack1.push(x);
}
int pop() {
while(!stack1.empty()){
stack2.push(stack1.top());
stack1.pop();
}
int res = stack2.top();
stack2.pop();
while(!stack2.empty()){
stack1.push(stack2.top());
stack2.pop();
}
return res;
}
int peek() {
while(!stack1.empty()){
stack2.push(stack1.top());
stack1.pop();
}
int res = stack2.top();
while(!stack2.empty()){
stack1.push(stack2.top());
stack2.pop();
}
return res;
}
bool empty() {
return stack1.empty();
}
private:
int size_;
stack<int> stack1;
stack<int> stack2;
};
做题心得:
太简单粗暴了,就是俩个栈倒过来到过去的,没有代码随想录上精妙。当从1栈导入2栈时候,不用把2栈再弄回去,如果后面需要队列头部元素,直接从2栈上继续获取就行,只有当2栈为空时候,才需要将1栈再全部导入2栈中,再依次往复。
225. 用队列实现栈
我的代码:
class MyStack {
public:
MyStack() {
}
void push(int x) {
q1.push(x);
}
int pop() {
int size_ = q1.size();
size_--;
while(size_--){
q2.push(q1.front());
q1.pop();
}
int res = q1.front();
q1.pop();
q1 = q2;
while(!q2.empty()) q2.pop();
return res;
}
int top() {
return q1.back();
}
bool empty() {
return q1.empty();
}
private:
queue<int> q1;
queue<int> q2;
};
做题心得:
模拟流程,熟悉具体API调用