zoukankan      html  css  js  c++  java
  • 最小栈实现

    #include<stdio.h>
    #include<stdlib.h>
    
    #define STACK_SIZE 500000
    class Stack {
    public:
        Stack() :m_index(0)
        {
            //m_data[STACK_SIZE] = { 0 };
            //m_minData[STACK_SIZE] = { 0 };
            m_data = new int[STACK_SIZE];
            m_minData = new int[STACK_SIZE];
    //        memset(m_data,0,STACK_SIZE);
    //        memset(m_minData,0,STACK_SIZE);
    
        };
        ~Stack() {
            if (0 != m_data)
                delete m_data;
            if (0 != m_minData)
                delete m_minData;
        };
        bool Push(int val);
        bool Pop(int& val);
        bool GetMin(int& val);
    private:
    
        int *m_data;
        int *m_minData;
        int m_index;
    
    };
    bool Stack::Push(int val)
    {
        if (m_index >= STACK_SIZE - 1)
            return false;
        m_data[m_index] = val;
        //update minStack
        if (0 == m_index)
        {
            m_minData[m_index] = val;
            m_index++;
            return true;
        }
        if (m_minData[m_index - 1] > val)
        {
            m_minData[m_index] = val;
        }
        else
        {
            m_minData[m_index]=m_minData[m_index-1];
        }
        m_index++;
        return true;
    }
    bool Stack::Pop(int& val)
    {
        if (m_index - 1 < 0)
            return false;
        val = m_data[--m_index];
        return true;
    }
    bool Stack::GetMin(int& val)
    {
        if (m_index - 1 < 0)
            return false;
        val = m_minData[m_index - 1];
        return true;
    }
    int main(void)
    {
        int num = 0;
        Stack obj;
        scanf("%d", &num);
      
        for (  int i = 0;i < num;i++)
        {
            int op = 0; int val = 0;
            int tmp = 0;
            scanf("%d", &op);
            switch (op)
            {
            case 0:
                if (obj.GetMin(tmp))
                    printf("%d
    ", tmp);
                break;
            case 1:
                scanf("%d", &val);
                obj.Push(val);
                break;
            case 2:
                if (obj.Pop(tmp))
                    printf("%d
    ", tmp);
                break;
            default:
                break;
            }
        }
        return 0;
    }
  • 相关阅读:
    比赛排名机制
    Python 异常(Exception)
    Python 异常(Exception)
    Sobel算子及C++实现
    一题多解(一) —— list(Python)判空(以及 is 与 == 的区别)
    常用软件的常用快捷键
    常用软件的常用快捷键
    从队列、二叉树到优先队列
    Jenkins(二)
    AssertValid函数学习
  • 原文地址:https://www.cnblogs.com/hitzzq/p/13371504.html
Copyright © 2011-2022 走看看