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

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

  1. template <typename TYPE>
  2. class CMinInStack
  3. {
  4. public:
  5. void Push(const TYPE& value);
  6. const TYPE Pop();
  7. const TYPE& GetMinValue() const;
  8.  
  9. private:
  10. stack<TYPE> m_stDataStack;
  11. stack<TYPE> m_stMinStack;
  12. };
  13.  
  14. template <typename TYPE>
  15. const TYPE& CMinInStack<TYPE>::GetMinValue() const
  16. {
  17. assert(!m_stDataStack.empty() && !m_stMinStack.empty());
  18.  
  19. return m_stMinStack.top();
  20. }
  21.  
  22. template <typename TYPE>
  23. const TYPE CMinInStack<TYPE>::Pop()
  24. {
  25. assert(!m_stDataStack.empty() && !m_stMinStack.empty());
  26.  
  27. TYPE value = m_stDataStack.top();
  28. m_stDataStack.pop();
  29. m_stMinStack.pop();
  30.  
  31. return value;
  32. }
  33.  
  34. template <typename TYPE>
  35. void CMinInStack<TYPE>::Push(const TYPE& value)
  36. {
  37. // 1.向栈中添加元素
  38. m_stDataStack.push(value);
  39.  
  40. // 2.往辅助栈中添加最小元素
  41. if (m_stMinStack.empty() || value < m_stMinStack.top())
  42. {
  43. m_stMinStack.push(value);
  44. }
  45. else
  46. {
  47. m_stMinStack.push(m_stMinStack.top());
  48. }
  49. }
  50.  
  51. void MinInStackTestFunc()
  52. {
  53. cout << "\n\n --------------- MinInStackTestFunc Start -------------->" << endl;
  54.  
  55. int aiArray[] = {3, 4, 5, 8, 9, 1, 4, 45, 89};
  56. int iLen = sizeof(aiArray) / sizeof(int);
  57. TRAVERSAL_ARRAY(aiArray, iLen);
  58.  
  59. CMinInStack<int> stMinStack;
  60.  
  61. for (int i = 0; i < iLen; i++)
  62. {
  63. stMinStack.Push(aiArray[i]);
  64. }
  65.  
  66. printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue());
  67.  
  68. printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
  69. printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
  70. printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue());
  71.  
  72. printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
  73. printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue());
  74.  
  75. printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
  76. printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
  77. printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
  78. printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue());
  79.  
  80. cout << "\n\n --------------- MinInStackTestFunc End -------------->" << endl;
  81.  
  82. }

题目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. P1966 火柴排队——逆序对(归并,树状数组)

    P1966 火柴排队 很好的逆序对板子题: 求的是(x1-x2)*(x1-x2)的最小值: x1*x1+x2*x2-2*x1*x2 让x1*x2最大即可: 可以证明将b,c数组排序后,一一对应的状态是 ...

  2. AWS API Gateway Swagger定义

    导出Swagger接口定义文件 在AWS API Gateway界面上,可以导出swagger接口定义文件. 而后利用Node js swagger-ui 依赖,生成swagger接口地址 Cloud ...

  3. FOI冬令营 Day4

    目录 T1.循环流(flow) 传送门 Code T2.整除分块(mex) 传送门 Code T3.森林(forest) 传送门 Code 咕咕咕 T1.循环流(flow) 传送门 Code /* 特 ...

  4. Tkinter 之Scale滑块标签

    一.参数说明 语法 作用 Scale(window, label="滑块") 滑块标题 Scale(window, label="滑块", from_=0) 滑 ...

  5. 2019-06-03 校内python模拟题解(所有非原题)

    一起来女装吧 本题改编自USACO(USA Computing Olympiad) 1.1节的第一题 (感谢lsy同学对本题题面的贡献) 直接计算就好了 chr:将ASCII码转成字符 ord:字符对 ...

  6. MovingWallVelocity边界条件【翻译】

    翻译自:CFD-online 帖子地址:http://www.cfd-online.com/Forums/openfoam-solving/59646-movingwallvelocity-bound ...

  7. 用win-acme给windows服务器添加SSL(Let's Encrypt)证书

    本文是我今天用win-acme给windows服务器添加SSL(Let's Encrypt)证书的一个过程,主要是给我自己备忘的. 1.首先先在github上下载最新版的win-acme. 下载地址: ...

  8. Comet OJ - Contest #6 B.双倍快乐(二维最大上升子序列和)

    双倍快乐 题目描述 Illyasviel:"你想要最长不下降子序列吗?" star-dust:"好啊!" Illyasviel:"老板,给我整两个最长 ...

  9. 2018-2019-2 网络对抗技术 20165231 Exp9 Web安全基础

    实验内容 本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分.包括(SQL,XSS,CSRF).Webgoat实践下相关实验. 实验过程 WebGoat: Webgoat是OWA ...

  10. TynSerial基本数据类型序列(还原)

    TynSerial基本数据类型序列(还原) procedure TForm1.ToolButton17Click(Sender: TObject); var serial: TynSerial; be ...