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

实现栈最小元素的min函数

时间: 2024-12-02 06:12:59

实现栈最小元素的min函数的相关文章

剑指offer20:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

1 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 2. 思路和方法 利用辅助栈来存储现有栈的最小值.在入栈和出栈的时候将现有栈和最小值栈进行比较.入栈时,若新值比最小值栈的栈顶还小,则将该值同时push到最小值栈:出栈时,若现有栈的栈顶和最小值栈栈顶一致,则同时出栈,否则,仅仅现有栈pop:通过这一操作,最小值栈的栈顶将永远是现有栈元素中的最下值. 3 C++核心代码 1 class Solution { 2 public: 3

【剑指offer】【栈】30.包含min函数的栈

包含min函数的栈 维护两个栈:栈st存储所有元素,minSt是一个单调栈,栈顶元素为min 1. 入栈:st.push(x); 若minSt.top >= x或minSt为空,x入栈minSt 2. 出栈:若minSt与st栈顶元素相同,则二者都出栈,否则st出栈 3. 获取最小值:若minSt不为空,返回minSt栈顶元素 class MinStack { public: stack<int> st; stack<int> minSt; /** initialize yo

包含MIN函数的栈+一个数组实现两个堆栈+两个数组实现MIN栈

1.题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 思路:利用一个辅助栈来存放最小值 栈  3,4,2,5,1 辅助栈 3,2,1 每入栈一次,就与辅助栈顶比较大小,如果小就入栈,如果大就不入栈当前的辅助栈:当出栈时,辅助栈元素相等时也要出栈. class Solution { public: stack<int> mystack1;//辅助栈 stack<int> minstack;//最小栈 void push(int value) { if(

包含min函数的栈-剑指Offer

包含min函数的栈 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数 思路 使用一个辅助栈,跟踪原始栈中每个元素在栈口时的该栈的最小值 代码 import java.util.Stack; public class Solution { Stack<Integer> s_data = new Stack(); Stack<Integer> s_min = new Stack(); public void push(int node) { s_data.

剑指OFFER之包含min函数的栈

题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数.接下来有n行,每行开始有一个字母Ci.Ci=’s’时,接下有一个数字k,代表将k压入栈.Ci=’o’时,弹出栈顶元素. 输出: 对应每个测试案例中的每个操作,若栈不为空,输出相应的栈中最小元素.否则,输出NULL. 样例输入: 7 s 3 s 4 s 2

举例让抽象问题具体化:包含min函数的栈

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). import java.util.Stack; public class Solution { Stack<Integer> dataStack = new Stack<Integer>(); Stack<Integer> minStack = new Stack<Integer>(); public void push(i

【剑指offer】13,包含min函数的栈

题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 分析:使用两个栈,一个正常存取元素,一个栈用来存储最小的元素,代码如下: 1 import java.util.Stack; 2 3 public class Solution { 4 5 Stack<Integer> s1 = new Stack<Integer>() ; 6 Stack<Integer> s2 = new Stack<Integer>() ; 7 publi

剑指offer系列源码-包含min函数的栈

题目1522:包含min函数的栈 时间限制:1 秒内存限制:128 兆特殊判题:否提交:1495解决:476 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数. 接下来有n行,每行开始有一个字母Ci. Ci='s'时,接下有一个数字k,代表将k压入栈. Ci='o'时,弹出栈顶元素. 输出: 对应每个测

经典算法——包含min函数的栈

题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. class Solution { public: stack<int> stack1; stack<int> helpStack;//辅助栈,存放最小值 void push(int value) { stack1.push(value); if(helpStack.size()==0 || value<helpStack.top())//每次都把最小值压入辅助栈 helpStack.push(v