代码随想录:用栈实现队列
代码随想录:用栈实现队列
主要是记一下栈和队列的定义和基本使用方法,值得注意的是pop和push都是操作,没有返回值,需要先用top和front获得顶端的值。
这个地方有个记忆技巧,栈只看“顶部顶端”,队列看“前后端”,即top和front
- **创建栈**
```cpp
std::stack<int> s;
-
检查是否为空
bool isEmpty = s.empty();
-
获取栈的大小
int size = s.size();
-
访问栈顶元素
int topElement = s.top();
-
添加元素(压栈)
s.push(10);
-
删除元素(弹栈)
s.pop();
-
创建队列
std::queue<int> q;
-
检查是否为空
bool isEmpty = q.empty();
-
获取队列的大小
int size = q.size();
-
访问队头元素
int frontElement = q.front();
-
添加元素(入队)
q.push(10);
-
删除元素(出队)
q.pop();
代码有优化空间,懒得改了
```cpp
class MyQueue {
public:
//通过另一个栈,每次push的时候把push的元素压到栈底
stack<int> temp;
stack<int> target;
MyQueue() {
}
void push(int x) {
while(!target.empty()){
temp.push(target.top());
target.pop();
}
target.push(x);
while(!temp.empty()){
target.push(temp.top());
temp.pop();
}
}
int pop() {
int val= target.top();
target.pop();
return val;
}
int peek() {
return target.top();
}
bool empty() {
return target.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();
*/