代码随想录:用栈实现队列
代码随想录:用栈实现队列
主要是记一下栈和队列的定义和基本使用方法,值得注意的是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();
 */

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号