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 }
  • 相关阅读:
    实现vue项目改造服务端渲染
    vue项目seo问题简单解决,并生成sitemap
    vue element-table滚动条样式修改
    vue全局注册事件
    获取浏览器数据
    vscode配置,vue开发环境
    在项目中使用facebook聊天插件
    linux配置nuxt项目
    Vue中实现div编辑效果,及contenteditable设置为plaintext-only与true的区别
    js中判断对象是否存在
  • 原文地址:https://www.cnblogs.com/raichen/p/5648731.html
Copyright © 2011-2022 走看看