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();
}
};