码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-04-01 06:42:13      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:找栈中最小数   时间复杂度o(1)   

#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(1)

标签:找栈中最小数   时间复杂度o(1)   

原文地址:http://green906.blog.51cto.com/10697569/1759022

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!