实现一个栈,Push,Pop,Min,并且保证时间复杂度为O

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现一个栈,Push,Pop,Min,并且保证时间复杂度为O相关的知识,希望对你有一定的参考价值。

#include<iostream> 
using namespace std; 
 
struct stack   
    { 
        int* _pElem; //指向元素数据的指针 
        int _capacity;  
        int _top;    

        stack( int n )
                  :_capacity( n) 
        { 
            _top = 0; 
            _pElem = new int [_capacity]; 
        } 

        ~stack() 
        { 
            delete []_pElem; 
            _pElem = NULL; 
        }         
    };
 
class Stack  
{   
private: 
    stack s; 
    stack minstack; 

public: 
    Stack(int n)
              :s( n)
               , minstack( n) 
    {} 
 
    bool pop() 
    {   
        if (s._top == 0) 
            return false ; 
 
        size_t value = s._pElem[--s._top]; 
        //判断将要弹出的是否是最小元素 如果是 则更新最小元素栈 
        if (value == minstack._pElem[minstack._top-1]) 
            --minstack._top; 
 
        return true ; 
    } 
 
    bool push( int value ) 
    { 
        if (s._top == s._capacity) 
            return false ; 
    
        if (minstack._top==0 || value <=minstack._pElem[minstack._top-1]) 
            minstack._pElem[minstack._top++] = value; 
 
        s._pElem[s._top++] = value; 
        return true ; 
    } 
  
    int min() 
    { 
        if (minstack._top == 0) 
            return NULL ;

        int pmin = minstack._pElem[minstack._top-1];
        return pmin; 
    } 
};


以上是关于实现一个栈,Push,Pop,Min,并且保证时间复杂度为O的主要内容,如果未能解决你的问题,请参考以下文章

剑指:包含min函数的栈(min栈)

实现一个队列,使得push_rear(), pop_front() 和get_min()的时间复杂度为O

栈的操作

剑指Offer对答如流系列 - 包含min函数的栈

包含min函数的栈

包含min函数的栈