C++ stack用法

C++庫以提供“模板”爲主。所謂模板,是指不必預先制定類型的函數或類。我們可以藉助STL(標準模板庫 Standard Template Library, STL)提供的高效算法來管理數據。爲應對多種需求,STL爲用戶提供了多種名爲容器(Container)的類,用於管理數據集合。在創建動態數組、表、棧、隊列等數據結構時,我們只需要定義對應的容器,然後調用相應成員函數或算法即可。

stack成員函數示例

  • size( ) :返回棧中元素個數
  • top( ) :返回棧頂的元素
  • pop( ) :從棧中取出並刪除元素
  • push(e) :向棧中添加元素e
  • empty( ) :棧爲空時返回true

示例訓練

定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數(時間複雜度應爲O(1))。

分析

應用一個輔助棧,主棧A用來保存實際數據,輔棧B用來保存最小元素。壓棧的時候,如果元素比B的棧頂小,則將該元素同時壓入A棧和B棧,否則只壓A棧;出棧的時候,若A棧頂元素等於B棧頂元素,則同時出棧,否則A出棧B不出棧。

class Solution {
public:
    stack<int> stack1,stack2;
    void push(int value) {
        stack1.push(value);
        if(stack2.empty())
            stack2.push(value);
        else{
            if(value < stack2.top())
                stack2.push(value);
        }
    }
    void pop() {
        if(stack1.top() == stack2.top()){
            stack2.pop();
        }
        stack1.pop();
    }
    int top() {
        return stack1.top();
    }
    int min() {
        return stack2.top();
    }
};
發佈了36 篇原創文章 · 獲贊 183 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章