包含min函数的栈:
1 压入:将value压入数据栈中,如果最小栈为空或者value小于最小栈顶,则把value压入最小栈中; 不然,把最小栈顶压入最小栈中
2 弹出,两个都弹
3 最小栈中栈顶保存的都是数据栈中的最小值
#include <iostream>
#include <stack>
#include <assert.h>
using namespace std;
class Solution
{
public:
//包含最小元素的栈
void push(int value) {
this->m_data.push(value);
if (this->m_min.size() == 0 || value < this->m_min.top()) {
this->m_min.push(value);//如果最小栈为空或者数据栈中元素小于最小栈的栈顶,
} //那么压入这个数
else {
this->m_min.push(this->m_min.top()); //如果不是,压入最小栈的栈顶
}
}
void pop() {
assert(this->m_data.size() > 0 && this->m_min.size() > 0);//条件不正确,中止执行
this->m_data.pop();
this->m_min.pop();
}
int top() {
assert(this->m_data.size() > 0 && this->m_min.size() > 0);
return this->m_data.top();
}
int min() {
if (this->m_data.empty() == true) {
return 0;
}
return this->m_min.top();
}
private:
stack<int> m_data;
stack<int> m_min;
};