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

  • 相关阅读:
    Unix系统中system函数的返回值
    vim 插件 for gbasic
    arch初认识
    TI IPNC Web网页之进阶修改
    Ti IPNC Web网页之ActiveX控件
    TI IPNC Web网页之网页修改教程
    OI,再见
    [OI]省选前模板整理
    OI刷题录——hahalidaxin
    51nod 小Z的trie(Trie+广义SAM)
  • 原文地址:https://www.cnblogs.com/menghuizuotian/p/3789600.html
Copyright © 2011-2022 走看看