본문 바로가기
● 백준/스택·큐

[스택 개념] 스택(Stack)이란?(C++ STL)

by user... 2020. 7. 1.

스택 개념

"먼저 들어온 게 제일 나중에 나간다."

 

개념을 이해하기 위해 상황이 담긴 이미지로 생각해봤으면 좋겠다 싶어 상황을 설명하고자 한다.

 

< 상 황 >

1. (책을 담을 상자 1개(밑에는 막혀 있으며, 위에는 열려 있는 구조)

2. (1번 책, 2번 책, 3번 책, 4번 책, 5번 책)

 

1,2번이 준비돼 있는 상황에서 1번~5번의 책을 상자에 우선적으로 담으려고 한다. 숫자 번호의 오름차순 순으로 올리고 싶다. 쌓을 땐 1번, 2번, 3번, 4번, 5번 순서로 책을 넣으면 될 것이다.

 

책을 뺄 때는?

쌓았던 순서의 역 순서인 5번의 책부터 빼고 4번 책을 빼면 될 것이다. "제일 처음에 넣었던 것을 마지막에 빼고, 제일 나중에 넣었던 걸 제일 처음으로 빼 나간다"

 

이것이 바로 스택의 개념이다.

하나의 말로 개념을 이해하는 것보다, 일단 이와 비슷한 사례를 보고 이해하는 게 제일 편하다.

 

자 이제 위의 상황을 바탕으로 코드를 통해 이해해보도록 하겠다. 아래 소스는 스택에 필요한 개념뿐만 아니라 스택에 있는 함수들을 이해하는데 좋은 코드들도 섞어 놓았다. 

소스코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <stack>
 
using namespace std;
 
int main(){
 
    stack<int> s;
 
    // push
    s.push(1);
    s.push(2);
    s.push(3);
    s.push(4);
    s.push(5);
 
    // top
    cout << "top element : " << s.top() << '\n';
 
    // pop
    s.pop(); // 5가 삭제
    s.pop(); // 4가 삭제
 
    // size
    cout << "stack's size : " << s.size() << '\n';
 
    // empty
    cout << "does stack empty? : " << (s.empty()?"Yes":"No")<<'\n';
 
    // remain element
    while(!s.empty()){
        cout <<  "remain element :" << s.top() <<'\n';
        s.pop();
    }
 
    return 0;
}
cs

 

실행 결과


스택 기본 함수

추가 및 삭제
 1. push() : top에 원소를 추가
 2. pop() : top에 있는 원소를 삭제

조회
 top() : top에서 가장 끝에 있는 원소를 반환

 

 기타

 1. empty() : 스택이 비어있으면 true 아니면 false를 반환
 2. size() : 스택 사이즈를 반환

'● 백준 > 스택·큐' 카테고리의 다른 글

[큐 개념] 큐(Queue)란?(C++ STL)  (0) 2020.07.01

댓글