[C++] STL Stack 사용법 & 예제 총정리

Stack이란?

자료 구조 중 하나인 Stack의 사전적 정의는 '쌓다', '더미'입니다. 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조라고 할 수 있습니다. Stack은 나중에 들어간 것이 먼저 나오는 (Last In First Out)의 형태를 띠는 자료구조입니다. 이 방식이 Stack의 가장 큰 특징이자 스택을 사용하는 이유라고 할 수 있습니다. Stack은 C++ 표준 라이브러리(Standard Template Library)에 있는 정의되어 있어 필요할 때마다 만들어 사용하지 않고 include 하여 사용하시면 편리합니다.

 

Stack의 특징

1. 먼저 들어간 자료가 나중에 나옴 LIFO(Last In First Out) 구조
2. 시스템 해킹에서 버퍼오버플로우 취약점을 이용한 공격을 할 때 스택 메모리의 영역에서 함 
3. 인터럽트처리, 수식의 계산, 서브루틴의 복귀 번지 저장 등에 쓰임
4. 그래프의 깊이 우선 탐색(DFS)에서 사용
5. 재귀적(Recursion) 함수를 호출 할 때 사용

 

 Stack 사용법 

Stack 선언

#include <stack>  // stack이 들어있는 헤더파일
stack<int> s;     //int형 스택 선언
stack<char>s;     //char형 스택 선언

stack을 선언하려면 <stack>이라는 헤더 파일을 include 한 뒤 stack <type> name과 같은 형식으로 선언하면 됩니다. 

 

Stack 값 추가

stack<int> s;  // int형 스택 선언
s.push(1);     // stack에 값 1 추가
s.push(2);     // stack에 값 2 추가
s.push(3);     // stack에 값 3 추가

stack에 값을 추가하고 싶다면 push(value)라는 메소드를 활용하면 됩니다. stack에 값을 계속해서 추가해나간다면 아래 그림과 같은 형태로 데이터가 쌓이게 됩니다.

Stack 값 삭제

stack<int> s;  // int형 스택 선언
s.push(1);     // stack에 값 1 추가
s.push(2);     // stack에 값 2 추가
s.push(3);     // stack에 값 3 추가
s.pop();       // stack에 값 제거

 스택에서 값을 제거하고싶다면 pop()이라는 메서드를 사용하면 됩니다. pop을 하면 가장 위쪽에 있는 원소의 값이 아래 그림과 같이 제거됩니다. 값을 제거한다기보다는 값을 빼낸다라는 의미에 가깝다고 할 수 있겠습니다.

 

Stack의 가장 상단의 값 출력

stack<int> s;  // int형 스택 선언
s.push(1);     // stack에 값 1 추가
s.push(2);     // stack에 값 2 추가
s.push(3);     // stack에 값 3 추가
s.top();     // stack의 가장 상단의 값 출력

스택에서 가장 마지막으로 들어간 값을 출력하고 싶다면 top()라는 함수를 사용하면 됩니다. 아래 그림과 같이 가장 마지막에 들어간 값이 출력됩니다.

 

Stack의 기타 메서드

stack<int> s1;  // int형 스택 선언
stack<int> s2;  // int형 스택 선언
s1.push(1);     // stack s1에 값 1 추가
s1.push(2);     // stack s1에 값 2 추가
s1.size();      // stack s1의 크기 출력 : 2
s1.empty();     // stack s1이 비어있는제 check (비어있다면 true)
s1.swap(s2);    // stack s2와 요소 바꾸기

그 밖에도 stack에는 크기를 구하는 size()메서드와 stack이 비어있는지 확인하는 empty() 메서드(비어있다면 true, 그렇지 않다면 false를 return) stack의 값을 서로 바꿔주는 swap 메서드가 있습니다.

댓글(0)

Designed by JB FACTORY