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