【C/C++练习题】栈中添加min方法
【摘要】
《剑指Offer》面试题30:包含min函数的栈
1 题目
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。
2 问题分析
构造一个辅助栈,保证辅助栈空间的栈顶元素始终是数据栈中的最小元素。那么当程序对栈进行...
《剑指Offer》面试题30:包含min函数的栈
1 题目
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。
2 问题分析
构造一个辅助栈,保证辅助栈空间的栈顶元素始终是数据栈中的最小元素。那么当程序对栈进行压栈or弹栈操作时,对应的辅助栈也要进行操作。
3 代码
#include <stack>
#include <assert.h>
#include <iostream>
//问题.实现一个包含min函数的栈
using namespace std;
template <typename T>
class StackWithMin
{
public:
StackWithMin() {}
virtual ~StackWithMin() {}
// T& top();
// const T& top() const;
void push(const T& value);
void pop();
const T& min() const;
// bool empty() const;
// size_t size() const;
private:
std::stack<T> m_data; // 数据栈,存放栈的所有元素
std::stack<T> m_min; // 辅助栈,存放栈的最小元素
};
template <typename T>
void StackWithMin<T>::push(const T& value) //实现push方法
{
//1.value压入数据栈
m_data.push(value);
//2.将当前最小数值压入辅助栈(第一个数值,直接压入辅助栈中)
if(m_min.size() == 0 || value < m_min.top())
m_min.push(value);
else
m_min.push(m_min.top());
}
template <typename T>
void StackWithMin<T>::pop() //实现pop方法
{
//1.检查栈是否为空
assert(m_data.size() > 0 && m_min.size() > 0);
//2.将数值弹出
m_data.pop();
m_min.pop();
}
template <typename T>
const T& StackWithMin<T>::min() const //实现min方法
{
//检查栈是否为空
assert(m_data.size() > 0 && m_min.size() > 0);
//返回最小数值
return m_min.top();
}
int main(int argc, char* argv[])
{
StackWithMin<int> stack;
stack.push(3);
stack.push(4);
stack.push(2);
stack.push(3);
cout << stack.min() << endl;
stack.pop();
stack.pop();
cout << stack.min() << endl;
return 0;
}
4 运行
文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/feit2417/article/details/99294385
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)