实现栈最小元素的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。

posted on 2014-08-05 00:03  初日  阅读(1675)  评论(0编辑  收藏  举报

导航