/////////////////////////////////////////////////////////////////////////////////////

// 3. 题目21  包含Min函数的栈

template <typename TYPE>
class CMinInStack
{
public:
void Push(const TYPE& value);
const TYPE Pop();
const TYPE& GetMinValue() const; private:
stack<TYPE> m_stDataStack;
stack<TYPE> m_stMinStack;
}; template <typename TYPE>
const TYPE& CMinInStack<TYPE>::GetMinValue() const
{
assert(!m_stDataStack.empty() && !m_stMinStack.empty()); return m_stMinStack.top();
} template <typename TYPE>
const TYPE CMinInStack<TYPE>::Pop()
{
assert(!m_stDataStack.empty() && !m_stMinStack.empty()); TYPE value = m_stDataStack.top();
m_stDataStack.pop();
m_stMinStack.pop(); return value;
} template <typename TYPE>
void CMinInStack<TYPE>::Push(const TYPE& value)
{
// 1.向栈中添加元素
m_stDataStack.push(value); // 2.往辅助栈中添加最小元素
if (m_stMinStack.empty() || value < m_stMinStack.top())
{
m_stMinStack.push(value);
}
else
{
m_stMinStack.push(m_stMinStack.top());
}
} void MinInStackTestFunc()
{
cout << "\n\n --------------- MinInStackTestFunc Start -------------->" << endl; int aiArray[] = {3, 4, 5, 8, 9, 1, 4, 45, 89};
int iLen = sizeof(aiArray) / sizeof(int);
TRAVERSAL_ARRAY(aiArray, iLen); CMinInStack<int> stMinStack; for (int i = 0; i < iLen; i++)
{
stMinStack.Push(aiArray[i]);
} printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue()); printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue()); printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue()); printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue()); cout << "\n\n --------------- MinInStackTestFunc End -------------->" << endl; }

题目21 包含Min函数的栈的更多相关文章

  1. 【算法题目】包含min函数的栈

    题目来源:<剑指offer>面试题21 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push以及pop的时间复杂度都是O(1). 分 ...

  2. 剑指Offer:面试题21——包含min函数的栈(java实现)

    问题描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push及pop的时间复杂度都是O(1). 思路:加入一个辅助栈用来存储最小值集合 (这里要注 ...

  3. 剑指offer-面试题21.包含min函数的栈

    题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数. 在该栈中,调用min,push及pop的时间复杂度都是O(1). 这一题实际上需要一个辅助栈存储最小值: 1.在模板类定 ...

  4. 《剑指offer》面试题21—包含min函数的栈

    题目:定义栈数据结构,并在该数据结构中实现一个能获得栈最小元素的函数min.要求push,min,pop时间都是O(1). 思路:要用一个辅助栈,每次有新元素压栈时辅助栈压入当前最小元素:min函数直 ...

  5. 《剑指offer》面试题21 包含min函数的栈 Java版

    (min函数的作用是返回栈内最小值) 首先这个栈要具有普通栈所具有的push()和pop()方法,那么内部一定包含一个Stack.至于还要能实现min函数,而且还是在O(1)时间复杂度内,我们不得不考 ...

  6. 21 包含min函数的栈

    定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. C++: class Solution { private: stack<int> dataStack ; stac ...

  7. 剑指Offer面试题:19.包含Min函数的栈

    一.题目:包含Min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 这里我们要实现的就是min ...

  8. 栈二:包含min函数的栈

    /** * 题目:包含min函数的栈 * 描述:  定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数.  *  注:用data来保存数据,用另一个栈min保存依次入栈最小的数 *  ...

  9. 【编程题目】设计包含 min 函数的栈

    2.设计包含 min 函数的栈(栈)定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素.要求函数 min.push 以及 pop 的时间复杂度都是 O(1). 我的思路: 用一个额外的 ...

随机推荐

  1. 粒子群优化算法及其java实现

    憋了两周终于把开题报告憋出来了,再一次证明自己不适合搞学术,哎--,花了点时间把报告中提到的粒子群算法看了看,看了些资料,用java跑起来. 算法简介 粒子群算法最先由Barnhart博士和Kenne ...

  2. 如何从DOS命令窗口进行复制粘贴

    在DOS窗口没有右键复制按钮,那我们如果想要进行复制粘贴该如何操作呢?本篇就来说明一下这个操作流程. 工具/原料   WIN7系统 方法/步骤     按“WIN+R”调出运行页面,在其中输入CMD然 ...

  3. boost 线程库

    http://www.boost.org/ Boost的安装 step1.从www.boost.org下载boost库 step2 在 tools\build\jam_src目录下 运行build.b ...

  4. Linux中工作目录切换命令

    1.pwd命令用于显示当前的工作目录 2.cd命令用于切换工作路径,格式为:cd [目录名称] 参数 作用 - 切换到上一次的 目录,如:cd - ~ 切换到”家目录“,如:cd ~ ~usernam ...

  5. 【翻译】JNA调用DLL

    一.前言 Jna调用的示范,基本包括了Java->C基本类型的转换,指针的转换等. 不过文章是2011年的,可能后面要查看下有什么改变. 二.原文 http://www.viaboxxsyste ...

  6. (四)OpenCV-Python学习—形态学处理

    通过阈值化分割可以得到二值图,但往往会出现图像中物体形态不完整,变的残缺,可以通过形态学处理,使其变得丰满,或者去除掉多余的像素.常用的形态学处理算法包括:腐蚀,膨胀,开运算,闭运算,形态学梯度,顶帽 ...

  7. 中间件 | mq消息队列解说

    消息队列 1.1 什么是消息队列 我们可以把消息队列比作是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用.消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系 ...

  8. LC 516. Longest Palindromic Subsequence

    Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...

  9. GPS nmealib学习 问题

    When building on Ubuntu 12.x the build fails with the following error… gcc  samples/generate/main.o ...

  10. osg qt fbx ifc bim osg ive 3ds max rvt

    项目环境变量配置 include E:\Qt\Qt5.12.2\5.12.2\msvc2017_64\include E:\OpenSourceGraph\OpenSceneGraph_install ...