zoukankan      html  css  js  c++  java
  • 面试题21:包含min函数的栈

    建立辅助栈,存放最小元素。当新元素比之前的最小元素小时,把新元素插入辅助栈里;否则把之前的最小元素重复插入辅助栈里

     1 // 《剑指Offer——名企面试官精讲典型编程题》代码
     2 // 著作权所有者:何海涛
     3 
     4 #pragma once
     5 
     6 #include <stack>
     7 #include <assert.h>
     8 
     9 template <typename T> class StackWithMin
    10 {
    11 public:
    12     StackWithMin(void) {}
    13     virtual ~StackWithMin(void) {}
    14 
    15     T& top(void);
    16     const T& top(void) const;
    17 
    18     void push(const T& value);
    19     void pop(void);
    20 
    21     const T& min(void) const;
    22 
    23     bool empty() const;
    24     size_t size() const;
    25 
    26 private:
    27     std::stack<T>   m_data;     // 数据栈,存放栈的所有元素
    28     std::stack<T>   m_min;      // 辅助栈,存放栈的最小元素
    29 };
    30 
    31 template <typename T> void StackWithMin<T>::push(const T& value)
    32 {
    33     // 把新元素添加到辅助栈
    34     m_data.push(value);
    35 
    36     // 当新元素比之前的最小元素小时,把新元素插入辅助栈里;
    37     //
    38     if(m_min.size() == 0 || value < m_min.top())
    39         m_min.push(value);
    40     else
    41         m_min.push(m_min.top());
    42 }
    43 
    44 template <typename T> void StackWithMin<T>::pop()
    45 {
    46     assert(m_data.size() > 0 && m_min.size() > 0);
    47 
    48     m_data.pop();
    49     m_min.pop();
    50 }
    51 
    52 
    53 template <typename T> const T& StackWithMin<T>::min() const
    54 {
    55     assert(m_data.size() > 0 && m_min.size() > 0);
    56 
    57     return m_min.top();
    58 }
    59 
    60 template <typename T> T& StackWithMin<T>::top()
    61 {
    62     return m_data.top();
    63 }
    64 
    65 template <typename T> const T& StackWithMin<T>::top() const
    66 {
    67     return m_data.top();
    68 }
    69 
    70 template <typename T> bool StackWithMin<T>::empty() const
    71 {
    72     return m_data.empty();
    73 }
    74 
    75 template <typename T> size_t StackWithMin<T>::size() const
    76 {
    77     return m_data.size();
    78 }
  • 相关阅读:
    一次线上bug引起的反思
    本地调试接口返回信息不对 以及 jar冲突问题
    404问题记录
    Intelij IDEA 配置Tomcat时找不到 “Application Server”
    java多线程处理问题
    DataTemplate和ControlTemplate的关系
    WP模板
    wp中的动画
    wp中的位图
    2013.7.22-7.28开发资料汇总
  • 原文地址:https://www.cnblogs.com/raichen/p/5648731.html
Copyright © 2011-2022 走看看