歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

包含min函數的棧

定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的min函數。在該棧中調用min,pop,push函數的時間復雜度都是O(1)。

#include <stack>
#include <assert.h>
using namespace std;

template <typename T> class StackWidthMin{
public:
 StackWidthMin(){}
 ~StackWidthMin(){}
 T& top();
 void pop();
 void push(const T& value);
 const T& min(void) const;
 bool empty() const;
 size_t size() const;

private:
 //數據棧,存放棧的所有元素
 stack<T> m_data;
 //輔助棧,存放棧的最小元素
 stack<T> m_min;
};

 template <typename T> bool StackWidthMin<T>::empty() const
 {
  return m_data.empty();
 }
 
  template <typename T> size_t StackWidthMin<T>::size() const
  {
   return m_data.size();
  }
 
  template <typename T> void StackWidthMin<T>::push(const T &value)
  {
   m_data.push(value);
   if (m_min==0||value<m_min.top())
   {
    m_min.push(value);
   }
   else
   {
    m_min.push(m_min.top());
   }
  }
 
  template <typename T> void StackWidthMin<T>::pop()
  {
   assert(m_data.size()>0&&m_min.size()>0);
   m_data.pop();
   m_min.pop();
  }

  template <typename T> T& StackWidthMin<T>::top()
  {
  m_data.top();
  }
 
  template <typename T> const T& StackWidthMin<T>::min(void)
  {
  assert(m_data.size>0&&m_min.size()>0);
  return m_min.top();
  }

Copyright © Linux教程網 All Rights Reserved