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。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

