实现思路:
用一个栈(数据栈
)保存数据,另外一个栈(最小值栈
)保存最小值。
每次Push
时,将数据直接压入数据栈,然后将数据根据条件压入到最小值栈。如果最小值栈为空,直接压入最小值栈。如果数据比最小值栈栈顶元素小,则将其压入最小值栈。否则压入最小值栈栈顶元素。
每次Pop
时,将数据栈和最小值栈的栈顶都进行pop。
实现代码:
头文件StackWithMin.h
class StackWithMin
{
public:
bool Empty();
std::size_t Size();
int Top();
void Push(int newData);// 这是重点
void Pop();// 这是重点
int Min();// 这是重点
private:
std::stack<int> m_datas;
std::stack<int> m_mins;
};
头文件StackWithMin.cpp
bool StackWithMin::Empty()
{
return m_datas.empty();
}
std::size_t StackWithMin::Size()
{
return m_datas.size();
}
int StackWithMin::Top()
{
// 因为std::stack自身有判空处理,这里不处理了
return m_datas.top();
}
void StackWithMin::Push(int newData) // 这是重点
{
m_datas.push(newData);
if (m_mins.empty() || newData < m_mins.top()) m_mins.push(newData);
else m_mins.push(m_mins.top());
}
void StackWithMin::Pop() // 这是重点
{
// 因为std::stack自身有判空处理,这里不处理了
m_datas.pop();
m_mins.pop();
}
int StackWithMin::Min() // 这是重点
{
return m_mins.top();
}