자료구조/자료구조 공부
[자료구조] 스택(stack) / 백준 10828 (C++)
개발하는 크롱
2020. 11. 21. 20:33
반응형
지난 포스트에서 스택에 대해 알아보았다.
이전 포스트: https://crong-dev.tistory.com/10
[자료구조] 스택(stack) / 백준 10828 (C)
스택이란? 삽입과 제거가 한쪽 끝에서만 이루어지는 특수한 선형 리스트. 후입 선출(Last-In-First-Out) 구조이다. 즉, 가장 마지막에(최신에) 들어온 데이터가 가장 먼저 나간다. 스택의 주요 연산 - p
crong-dev.tistory.com
이번 포스트에서는 c++에서 스택 사용법에 대해 알아보겠다.
C++에서는 지난 포스트에서 C언어로 한 것 처럼 함수를 일일이 구현할 필요가 없다.
스택 헤더가 있기 때문이다!
#include <stack>
위 처럼 스택 헤더를 include해주면 된다.
스택 생성 방법
// stack<원소 자료형> 스택 변수 이름; 으로 선언해주면 된다.
// 스택 원소의 자료형이 int이고 해당 스택의 이름을 st라고 하고 싶은 경우
stack<int> st;
C++ 스택 헤더의 스택 주요 연산 함수를 알아보자.
스택의 주요 연산
- push(element)
: 스택에 원소 삽입
- pop()
: 스택에서 원소 제거 - 가장 위의 원소 // 반환값은 없다
- top()
: 가장 위에 있는 원소 반환
- empty()
: 스택이 비었는지 확인. 스택이 비어있으면 true 아니면 false를 반환.
- size()
: 스택 사이즈(현재 몇 개의 원소인지)를 반환
아래는 C++로 스택의 주요 연산을 구현한 것이다. 백준 10828문제의 소스코드이다.
(문제링크: www.acmicpc.net/problem/10828)
#include <iostream>
#include <string>
#include <stack>
using namespace std;
stack<int> st; //스택 생성. <>안에는 원소의 타입을 적어주면 된다
int main() {
int N;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
string command;
cin >> command;
if (command == "push") {
int x;
cin >> x;
st.push(x);
}
else if (command == "pop") {
if (!st.empty()) {
cout << st.top() << endl;
st.pop();
}
else {
cout << -1 << endl;
}
}
else if (command == "size") {
cout << st.size() << endl;
}
else if (command == "empty") {
cout << st.empty() << endl;
}
else if (command == "top") {
if (!st.empty()) {
cout << st.top() << endl;
}
else {
cout << -1 << endl;
}
}
}
return 0;
}
반응형