zoukankan      html  css  js  c++  java
  • 包含min函数的栈

    题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。

    分析:当一个栈解决不了问题的时候我们就可以考虑采用辅助栈。

          每次第二个栈一直是保存所定义栈中最小的元素,每次入栈的时候,辅助栈都进行比较保存最小的元素。

    先在头文件定义:

    typedef char ElemType;
    class StackWithMin{
    public:
        StackWithMin ();
        void  push(const char & );
        void  pop(char &);bool isEmpty();
    private:
        SeqStack *m_data;
        SeqStack *m_min;
    };

    接下来在源文件中实现

    //初始化StackWithMin
    StackWithMin::StackWithMin ()   
    {
        m_data=InitStack();
        m_min=InitStack();
    }
    //push,如果比m_min的栈顶小,就将value压进去
    void StackWithMin::push(const ElemType & value)
    {
        //每次都对m_data和m_min都进行操作
        Push(m_data,value);
        if(m_min->top==-1||value<m_min->data[m_min->top])
            Push(m_min,value);
        else
            Push(m_min,m_min->data[m_min->top]);
    }
    //pop
    void StackWithMin::pop(ElemType & value)
    {
        assert(m_data->top>=0&&m_min->top>=0);
        Pop(m_data,value);
        Pop(m_min,value);
        
    }
    //判断是否为空
    bool StackWithMin::isEmpty()
    {
       if (m_data->top==-1||m_min->top==-1)
          return true;
       return false;  
    }

    main.cpp实现

    StackWithMin stack;
        cout<<"包含min函数栈输入元素,并按<ENTER>结束"<<endl;
        ElemType ch,ch_result;
        ch=getchar();
        while(ch!='
    ')
        {
            stack.push(ch);
            ch=getchar();
        }
       while(!stack.isEmpty())
       {
           stack.pop(ch_result);
           cout<<ch_result<<" ";
       }

    结果:

    image

  • 相关阅读:
    音频可视化
    accunulate
    node
    js 中编码(encode)和解码(decode)的三种方法
    ES6高阶 同步和异步 回调地狱 promise async和await
    区间dp
    树形dp1
    背包dp(多重)
    树形dp
    背包dp(完全)
  • 原文地址:https://www.cnblogs.com/menghuizuotian/p/3789600.html
Copyright © 2011-2022 走看看