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
***************************************************************
*/
- 題目描述:
-
定義棧的數(shù)據(jù)結(jié)構(gòu),請(qǐng)?jiān)谠擃愋椭袑?shí)現(xiàn)一個(gè)能夠得到棧最小元素的min函數(shù)。
?
- 輸入:
-
輸入可能包含多個(gè)測試樣例,輸入以EOF結(jié)束。
對(duì)于每個(gè)測試案例,輸入的第一行為一個(gè)整數(shù)n(1<=n<=1000000), n代表將要輸入的操作的步驟數(shù)。
接下來有n行,每行開始有一個(gè)字母Ci。
Ci=’s’時(shí),接下有一個(gè)數(shù)字k,代表將k壓入棧。
Ci=’o’時(shí),彈出棧頂元素。?
- 輸出:
-
對(duì)應(yīng)每個(gè)測試案例中的每個(gè)操作,
若棧不為空,輸出相應(yīng)的棧中最小元素。否則,輸出NULL。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

