Algorithm

스택_이론

MoYoungmin 2018. 8. 14. 13:29

Stack

한쪽 끝에서만 자료를 넣고 뺄 수 있는 자료구조이다.

마지막으로 넣은 것이 가장 먼저 나오기때문에 Last In First Out(LIFO)라고도 한다.

기본적인 함수

 push : 스택에 자료를 넣는 연산

 pop : 스택에서 자료를 빼는 연산

 top : 스택의 가장 위에 있는 자료를 보는연산

 empty : 스택이 비어있는지 아닌지를 알아보는 연산

 size : 스택에 저장되어 있는 자료의 개수를 알아보는 연산


배열 같은 경우 중간 삽입/삭제는 배열의 길이만큼 걸린다. 즉 O(n)이다. 하지만 스택의 모든 연산은 O(1)이므로 스택의 가장 가까운걸(top) O(1)만에 찾을 수 있다.

 

Example

1. 재귀함수

2. 웹 브라우저 방문기록

3. ctrl + z 같은 실행취소

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <stack>
#include <string>
using namespace std;
struct Stack {
    int data[10000];
    int size;
    Stack() :size(0) {}
    void push(int num) {
        data[size= num;
        size += 1;
    }
    bool empty() {
        if (size == 0) {
            return true;
        }
        else {
            return false;
        }
    }
    int pop() {
        if (empty()) {
            return -1;
        }
        else {
            size -= 1;
            return data[size];
        }
    }
    int top() {
        if (empty()) {
            return -1;
        }
        else {
            return data[size - 1];
        }
    }
};
int main() {
    Stack s;
    string cmd;
 
    while (true) {
        cin >> cmd;
        if (cmd == "push") {
            int num;
            cin >> num;
            s.push(num);
        }
        else if (cmd == "top") {
            cout << (s.empty() ? -1 : s.top()) << '\n';
        }
        else if (cmd == "size") {
            cout << s.size << '\n';
        }
        else if (cmd == "empty") {
            cout << s.empty() << '\n';
        }
        else if (cmd == "pop") {
            cout << (s.empty() ? -1 : s.top()) << '\n';
            if (!s.empty()) {
                s.pop();
            }
        }
    }
    return 0;
}
cs

출처 백준 온라인 강의_알고리즘 기초