zoukankan      html  css  js  c++  java
  • 实现栈最小元素的min函数

     1 #include<iostream>
     2 #include<stack>
     3 using namespace std;
     4 class min_stack
     5 {
     6 public:
     7     void push(int);
     8     void  pop();
     9     int min();
    10     int size()
    11     {
    12         return data.size();
    13     }
    14 private:
    15     stack<int> data;
    16     stack<int> min_data;
    17 };
    18 void min_stack::push(int value)
    19 {
    20     data.push(value);
    21     if (min_data.size()==0 || min_data.top() > value)
    22     { 
    23         min_data.push(value);
    24     }
    25     else
    26     {
    27         min_data.push(min_data.top());
    28     }
    29 }
    30 void min_stack::pop()
    31 {
    32     if (data.size()>0)
    33     {
    34         min_data.pop();
    35         data.pop();
    36     }
    37 }
    38 int min_stack::min()
    39 {
    40     return min_data.top();
    41 }
    42  
    43 int main(int argc, char **argv)
    44 {
    45     int n,m;
    46     char ci;
    47     while(cin>>n)
    48     {
    49         min_stack mystack;
    50         for (int i=0; i<n; i++)
    51         {
    52             cin>>ci;
    53             switch (ci)
    54             {
    55             case 's':
    56                 cin>>m;
    57                 mystack.push(m);
    58                 cout<<mystack.min()<<endl;
    59                 break;
    60             case 'o':
    61                 mystack.pop();
    62                 if (mystack.size()==0)
    63                 {
    64                     cout<<"NULL"<<endl;
    65                 }
    66                 else
    67                 {
    68                     cout<<mystack.min()<<endl;
    69                 }
    70                 break;
    71             }
    72         }   
    73     }
    74        return 1;
    75 }
    76 /**************************************************************
    77     Problem: 1522
    78     User: xuebintian
    79     Language: C++
    80     Result: Accepted
    81     Time:140 ms
    82     Memory:1524 kb
    83 ****************************************************************/
    题目描述:

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

    输入:

    输入可能包含多个测试样例,输入以EOF结束。
    对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数。
    接下来有n行,每行开始有一个字母Ci。
    Ci=’s’时,接下有一个数字k,代表将k压入栈。
    Ci=’o’时,弹出栈顶元素。

    输出:

    对应每个测试案例中的每个操作,
    若栈不为空,输出相应的栈中最小元素。否则,输出NULL。

  • 相关阅读:
    班课6
    lesson one
    班课5
    ES6之Proxy及Proxy内置方法
    ES6模板字符串
    ES6之Symbol
    ES6对象及ES6对象简单拓展
    ES6函数的拓展
    ES6数组及数组方法
    ES6字符串方法
  • 原文地址:https://www.cnblogs.com/churi/p/3891329.html
Copyright © 2011-2022 走看看