0. Stack (스택)이란?
스택(Stack)은 후입선출(Last In First Out)의 형태를 갖고있는 자료구조이다. 나중에 들어간 것이 먼저 나온다는 의미인데 큐(Queue)의 선입선출과 반대라고 보면 된다. 그래프의 깊이 우선 탐색(DFS)에서 사용되고, 재귀적(Recursion) 함수를 호출 할 때도 사용된다. 기본 함수로 push, pop, empty, top, swap 등이 대표적으로 자주 쓰인다.
1. 기본 사용법
1.1 헤더
스택 STL은 헤더를 통해 stack을 include하여 사용할 수 있다.
#include <stack>
stack<int> stk1; // int형 스택
stack<char> stk2; // char형 스택
1.2 멤버 함수
- push(data) : stack에 data를 추가한다.
- pop() : stack의 top 데이터를 삭제한다.
- top() : stack의 제일 최상단 데이터를 반환한다.
- size() : 스택의 현재 사이즈를 반환한다.
- empty() : 스택이 비어있다면 1, 비어있지 않다면 0을 출력한다.
- swap(stk1, stk2) : stk1와 stk2가 둘 다 스택일 때 둘의 내용을 서로 바꾼다.
stack<int> stk1; // int형 스택
stack<int> stk2; // int형 스택
stk1.push(10); // stk1에 int형 데이터 10 추가
stk1.push(20); // stk1에 int형 데이터 20 추가
stk1.pop() // stk1의 최상단 데이터 제거(20)
stk1.size(); // stk1의 크기 출력 : 1
stk1.empty(); // stk1이 비어있는지 체크(비어있다면 true)
stk1.swap(stk2); // stk2와 데이터를 맞바꾼다.
1.3 예시
#include <iostream>
#include <stack>
using namespace std;
stack<int> stk1;
stack<int> stk2;
int main() {
stk1.push(1); // stk1 {1}
stk1.push(2); // stk1 {1, 2}
stk1.push(3); // stk1 {1, 2, 3}
stk2.push(4); // stk2 {4}
stk2.push(5); // stk2 {4, 5}
stk2.push(6); // stk2 {4, 5, 6}
swap(stk1, stk2);
while (!stk1.empty()) {
cout << stk1.top() << endl;
stk1.pop();
}
return 0;
}
1. 스택 stk1에는 1 -> 2 -> 3 순서로 데이터를 삽입하고, stk2에는 4 -> 5 -> 6 순서로 데이터를 삽입한다.
2. swap함수를 통해 stk1 스택과 stk2 스택의 요소들을 교환한다.
3. stk1이 비어있지 않다면 반복문을 통해 최상단 데이터를 top()을 이용 반환하여 출력하고, pop()을 통해 제거한다.
'자료구조' 카테고리의 다른 글
[C++] STL Priority_Queue 우선순위 큐 사용법 (0) | 2023.06.14 |
---|