创新网站建设工作2023很有可能再次封城吗
题目:定义"栈"的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数,在该栈中,调用min,push,pop的时间复杂度都是O(1)。
分析:用双栈实现,一个是正常的数据栈,一个是存当前数据栈中最小元素的栈
template <class T>
class Min_Stack
{
private:stack<T> data_stack;//数据栈stack<T> min_stack;//最小栈
public://入栈。首先入栈要入到数据栈中。最小栈入栈规则如下://(1)最小栈为空,直接给最小栈入栈(2)新入的元素<最小栈的元素//则直接给最小栈入栈,否则再次将最小栈元素栈顶元素入一次栈//即最小栈元素个数与数据中元素个数相同,并且最小栈栈顶永远//存的是数据栈当前最小值。void push(const T& x){data_stack.push(x);if (min_stack.empty() || x < min_stack.top()){min_stack.push(x);}else{min_stack.push(min_stack.top());}}//出栈。数据栈和最小值同时出栈void pop(){assert(data_stack.size() > 0 && min_stack.size() > 0);data_stack.pop();min_stack.pop();}//取最小元素。直接取最小栈栈顶元素T& min(){assert(data_stack.size() > 0 && min_stack.size() > 0);return min_stack.top();}
};