设计包含min函数的栈(2)

定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。

 

#include<iostream>
#include<iomanip>
using namespace std;
/*
2.设计包含min函数的栈(栈)
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
*/
#define maxNum 
template<typename T,int N>
class  stack
{
   public:
       stack<T,N>()
       {
          top=-1;
          min_index=-1;
       }
   bool push(T val)
   {
      if(top>=N-1)
      return false;
      m_stack[++top]=val;
      if(val<this->min())
      {
          min_mem[top]=min_index;
          min_index=top;
      }
      else
      {
          min_mem[top]=-1;
      }
      return true;
   }
   
   int min()
   {
       if(top==-1)
      	 return maxNum;
       else
       {
           return m_stack[min_index];
       }
   }
   
   int pop()
   {
      if(top==-1)
      	return maxNum;
      else
      {
          int ret;
          ret=m_stack[top];
          if(top==min_index)
          {
             min_index=min_mem[top];
          }
          top--;
          return ret;
      } 
   }
   private:
     T m_stack[N];
     int min_mem[N];
     int top;
     int min_index;
};

int main()
{

    system("pause");
    return 0;
}


分析:以上代码在DevC++中正常编译。DevC++适合写小型C++,程序小巧,安装也很快,完美支持最新C++标准。

代码中,定义了一个stack类,采用模板。N为堆栈大小,这里把它作为模板参数,其实更好的方法是作为一个const成员变量。类型T的对象需要支持比较操作,因此如果不是内建类型,需要重载比较操作符。

maxNum 为无穷大,压入堆栈中的数字不能大于maxNmu。这个算法是一个用空间换时间的思想,需要通常堆栈的2倍空间。

 

实现的思路都在代码里了,请指教!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值