程式碼隨想錄:用棧實現佇列

huigugu發表於2024-12-10

程式碼隨想錄:用棧實現佇列

主要是記一下棧和佇列的定義和基本使用方法,值得注意的是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();
 */

相關文章