1. Stack이란?
-> 헤드에서만 데이터의 삽입과 삭제가 이루어지는 리스트
일반적으로 리스트는 리스트의 시작 부분을 헤드(Head), 리스트의 반대편 끝을 테일(Tail)이라고 부르는데, 위 그림에서 보이는 것처럼 스택에서 데이터의 삽입과 삭제는 모두 헤드에서만 이루어진다!
스택은 데이터를 아래에서 위로 쌓는것과 비슷하다.
그래서 스택의 테일은 하단(Bottom)이라고 부르고, 헤드는 상단(Top)이라고 부른다.
데이터를 삽입하고, 삭제하는 것도 명칭이 있다. 데이터의 삽입은 값을 밀어준다는 느낌으로 push라고 부르며, 데이터의 삭제는 값을 뽑아낸다는 느낌으로 pop이라고 부른다.
이렇듯 스택은 아래에서 위로 차곡차곡 데이터가 쌓이고, 위에서부터 데이터가 삭제된다.
즉, 먼저 들어간 데이터는 가장 마지막에 나온다는 것이다. 우리는 이러한 스택의 특성을 후입선출/선입후출, 혹은 LIFO(Last-In, First-Out)라고 부른다.
2. Stack 사용법
- C++에서는 우리가 직접 스택을 구현할 필요가 없다!!
C++의 STL(Standard Template Library)을 이용하면 스택을 간편하게 사용할 수 있다!!
<stack>
헤더 파일을 include
해야한다.stack<type> name
형식으로 선언할 수 있다.#include <stack>
stack<int> s1; // int형 스택
stack<char> s2; // char형 스택
push()
, pop()
등의 다양한 함수를 제공한다.#include <stack>
stack<int> s;
s.push(1); // 스택에 1 추가
s.push(3); // 스택에 3 추가
s.push(7); // 스택에 7 추가
s.pop(); // 스택 최상단 데이터 삭제 (7 삭제)
s.pop(); // (3 삭제)
s.top(); // 스택 최상단의 데이터 반환 (최상단 데이터 : 1)
s.size(); // 스택의 크기 반환 (크기 : 1)
s.empty(); // 스택이 비어있는지 bool 타입으로 반환 (false)
stack<int> s2;
s.swap(s2); // 스택 s의 내용과 스택 s2의 내용 swap
// swap(s, s2); 이 방법도 가능