zoukankan      html  css  js  c++  java
  • 数据结构练习(02)设计包含min函数的栈

    http://zhedahht.blog.163.com/blog/static/25411174200712895228171/

    基本上是把代码抄了一遍,中间也查阅和理解了不少东西。

    这里的思想和编程之美上面的稍有不同,编程之美上面给出的解法是涉及一个最小值的链,而这次的思路是涉及一个对应的栈,如果push的不是最小值,则把以前的坐标压栈。

    #include <deque>
    #include <cassert>
    
    template <typename T> class CStackWithMin 
    {
    public:
        CStackWithMin(void) {}
        virtual ~CStackWithMin(void) {}
    
        T& top(void);
        const T& top(void) const;
    
        void push(const T& value);
        void pop(void);
    
        const T& min(void) const;
    
    private:
        deque<T> m_data;
        deque<size_t> m_minIndex;
    };
    
    template <typename T> T& CStackWithMin<T>::top()
    {
        return m_data.back();
    }
    
    template <typename T> const T& CStackWithMin<T>::top() const
    {
        return m_data.back();
    }
    
    template <typename T> void CStackWithMin<T>::push(const T& value)
    {
        m_data.push_back(value);
    
        if (m_minIndex.size() == 0)
            m_minIndex.push_back(0);
        else
        {
            if (value < m_data[m_minIndex.back()])
                m_minIndex.push_back(m_data.size() - 1);
            else
                m_minIndex.push_back(m_minIndex.back());
        }
    }
    
    template <typename T> void CStackWithMin<T>::pop()
    {
        m_data.pop_back();
        m_minIndex.pop_back();
    }
    
    template <typename T> const T& CStackWithMin<T>::min() const
    {
        assert(m_data.size() > 0);
        assert(m_minIndex.size() > 0);
    
        return m_data[m_minIndex.back()];
    }

    感叹自己的C++水平不足,以后还得不断习练才行。

    -------------------------------------------------------

    kedebug

    Department of Computer Science and Engineering,

    Shanghai Jiao Tong University

    E-mail: kedebug0@gmail.com

    GitHub: http://github.com/kedebug

    -------------------------------------------------------

  • 相关阅读:
    动与静
    ASP.NET 2.0 Membership
    又是asp.net 2.0的一个奇怪异常
    Cool tool !ASP.NET AJAX JavaScript Class Browser
    UserFul Methods
    中秋快乐
    Windows Vista RTM
    asp.net 2.0 下的表单验证Cookieless属性
    DataTable 内部索引已损坏:"4"
    asp.net 2.0 用户管理功能结构
  • 原文地址:https://www.cnblogs.com/kedebug/p/2812970.html
Copyright © 2011-2022 走看看