理论基础
1 栈
top()、pop()、push()
2 队列
1、back()、front()、pop()、push()
2、注意易混点:只有双头队列deque才可以push_back()、push_front()、pop_back()、pop_front()
232.用栈实现队列
力扣:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push
、pop
、peek
、empty
)
1、注意:不是要实现印象中的那些队列的函数,而是要看题意,比如这个pop还要返回值
2、关键:只有当out是空的时候才将in中的数据全部导入out,否则就在out里弹出即可
3、代码:
class MyQueue {
public:
MyQueue() {
}
//入队列的栈
stack<int> in;
stack<int> out;
void push(int x) {
in.push(x);
}
int pop() {
//只有当out是空的时候才把in中的数据导入
if(out.empty())
{
while(!in.empty())
{
int temp = in.top();
in.pop();
out.push(temp);
}
}
int res = out.top();
out.pop();
return res;
}
int peek() {
int result = this->pop();
out.push(result);
return result;
}
bool empty() {
if(out.empty() && in.empty()) return true;
else return false;
}
};
225.用队列实现栈
力扣:使用队列实现栈的下列操作:push(x) -- 元素 x 入栈;pop() -- 移除栈顶元素;top() -- 获取栈顶元素;empty() -- 返回栈是否为空
1、注意:不是要实现印象中的那些栈的函数,而是要看题意,比如这个题pop还要返回值
2、关键:queue有back和front可以取
3、代码:
class MyStack {
public:
//用一个队列模拟栈的行为
MyStack() {
}
queue<int> q;
void push(int x) {
q.push(x);
}
int pop() {
for(int i=0;i<q.size()-1;i++)
{
int temp = q.front();
q.pop();
q.push(temp);
}
int res = q.front();
q.pop();
return res;
}
int top() {
return q.back();
}
bool empty() {
if(q.empty()) return true;
else return false;
}
};