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

包含min函数的栈

时间:2014-06-19 00:55:50      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   http   color   

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的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!=\n)
    {
        stack.push(ch);
        ch=getchar();
    }
   while(!stack.isEmpty())
   {
       stack.pop(ch_result);
       cout<<ch_result<<" ";
   }

结果:

bubuko.com,布布扣

包含min函数的栈,布布扣,bubuko.com

包含min函数的栈

标签:style   class   blog   code   http   color   

原文地址:http://www.cnblogs.com/menghuizuotian/p/3789600.html

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