代码随想录:用栈实现队列

代码随想录:用栈实现队列

主要是记一下栈和队列的定义和基本使用方法,值得注意的是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();
 */
posted @ 2024-12-10 22:39  huigugu  阅读(17)  评论(0编辑  收藏  举报