首页 > 代码库 > 包含min函数的栈

包含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;};

接下来在源文件中实现

//初始化StackWithMinStackWithMin::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]);}//popvoid 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!=\n)    {        stack.push(ch);        ch=getchar();    }   while(!stack.isEmpty())   {       stack.pop(ch_result);       cout<<ch_result<<" ";   }

结果:

image