[자료구조] 스택 (Stack)
2019-05-02
자료구조의 기초인 스택에 대해 알아보겠습니다.
스택
스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조입니다. 따라서 스택에서 자료를 뺄 때에는 가장 최근에 넣은 것을 먼저 빼는 LIFO (Last In First Out)를 따릅니다.
스택에 원소를 삽입하는 것을 push라고 하고, 원소를 삭제하는 것을 pop이라고 합니다. 이 두 연산은 검색이 따로 필요없으므로 $O(1)$의 시간 복잡도를 가집니다.
스택에서 데이터를 검색할 수 는 없습니다. 하지만 pop을 해도 스택에서 데이터가 없어지지 않는다는 가정하에 스택의 i 번째 위치의 값을 검색하는 프로그램이 있다고 합시다. 이 프로그램이 스택을 검색하는 방식은 직접 접근이 아닌 순차 접근입니다. 따라서 스택은 배열보다는 링크드리스트와 가깝습니다. 사실 스택은 삽입과 삭제를 첫 번째 요소에서만 하는 링크드리스트의 단순 변형입니다.
배열로도 스택을 구현할 수 있습니다. 단, 배열을 사용 할 때에는 스택의 맨 위 원소를 가리키는 top이라는 변수가 필요합니다.
스택의 연산
고정된 크기의 스택이라 가정합니다.
- push(item) : 스택에 item을 삽입
- pop() : 스택에서 top에 있는 데이터를 삭제하고 그 값을 리턴
아래의 연산은 꼭 필요한 것은 아니고 부수적인 연산입니다.
- top() : top이 가리키는 원소를 리턴
- isempty() : 스택에 원소가 없으면 true, 있으면 false 값 리턴
- isfull() : 스택에 원소가 꽉 찼으면 true, 그렇지 않으면 false를 리턴
- size() : 스택에 들어있는 원소의 개수를 리턴
스택의 활용
-
수식의 괄호 검사
-
재귀 알고리즘
-
컴퓨터