MS algorithm interview (2) Stack with min function

来源:互联网 发布:公安局文职怎么样 知乎 编辑:程序博客网 时间:2024/05/17 07:43

/*

2.设计包含min函数的栈。
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
*/
class Stack {

private:

       struct Link

       {

        int data;

        Link* next;

        Link(const int & dat,Link* nxt):data(dat),next(nxt){}

        ~Link(){}

       }*pHead;

       Link *pMinimum;

public:

      Stack():pHead(NULL),pMinimun(NULL){}

      Stack(const int& initial)

      {

      pHead=new Link(initial,NULL);

      pMinimun=new Link(initial,NULL);

      }

      ~Stack()

      {

      Link* tmpNode=NULL;

      while(pHead!=NULL)

      {

      tmpNode=pHead;

      pHead=pHead->next;

      delete tmpNode;

      tmpNode=NULL;

      }

      while(pMinimum!=NULL)

      {

       tmpNode=pMinimum;

       pMinimum=pMinimum->next;

       if(tmpNode!=NULL)

       {

        delete tmpNode;

        tmpNode=NULL;

       }

      }

    }

    bool push(const int& newData)

    {

    pHead=new Link(newData,pHead);

    if(pMinimum==NULL ||pMinimum->data>=newData)

     {

     pMinimum=new Link(newData,pMinimum);

     }

     return true;

    }

    bool pop(int& iData)

    {

    if(pHead==NULL)

     {

     return false;

     }

     iData=pHead->data;

     Link* tmpNode=pHead;

     pHead=pHead->next;

     delete tmpNode;

    if(iData==pMinimum->data)

     {

     tmpNode = pMinimum;

     pMinimum = pMinimum->next;

     delete tmpNode;

     }

     return true;

    }

    bool min(int& iMinimum) const

    {

     if(pMinimum == NULL)

      {

      return false;

      }

      iMinimum = pMinimum->data;

      return true;

    }

    bool empty() const

   {

   return pHead == NULL;

   }

};

原创粉丝点击