스택과 큐
스택
스택이란?
데이터를 일시적으로 쌓아 놓는 자료구조
- 데이터의 입력과 출력 순서 : LIFO(Last in, First Out)
- 가장 나중에 넣은 데이터를 가장 먼저 추출하는 정잭
- 후입선출
- 스택 활용의 예
- 컴퓨터 내부 프로세스 구조의 함수 동작 방식
- 재귀 프로그램
- 빨래통
- 책 쌓기
주요 기능
push()
스택에 데이터를 넣는 작업
pop()
스택에 데이터를 꺼내는 작업
메서드 호출과 스택
자바 프로그램에서 메서드를 호출, 실행 시 내부에서 스택을 사용함
void x() { /* ... */ }
void y() { /* ... */ }
void z(){
x();
y();
}
void main(){
z();
}
- main 메서드가 실행되기 전의 상태
- main 메서드가 호출되어 실행을 시작
- z 메서드 호출
- x 메서드 호출
- x 메서드 실행 종료, z 메서드로 돌아옴
- y 메서드 호출
- y 메서드 실행 종료, z 메서드로 돌아옴
- z 메서드 실행 종료, main 메서드로 돌아옴
- main 메서드가 실행을 종료
장/단점
장점
- 구조가 단순하여 구현이 용이함
- 데이터의 저장/읽기 속도가 빠름
단점
- 데이터의 최대 개수를 미리 정해야 함
- 저장 공간의 낭비가 발생함
- 사용하려는 데이터의 최대 개수만큼 저장 공간을 확보해야 함
팁
스택은 빠른 성능을 위해 사용되므로, 배열을 활용해 구현하는 것이 일반적임
Java의 스택
스택의 push 알고리즘
top <- top + 1;
- 스택에서 top이 마지막 데이터를 가리키고 있으므로 그 위에 자료를 삽입하려면 먼저 top의 위치를 하나 증가시킴
- 이때 top의 위치가 스택의 크기(stack_size)보다 크다면 오버플로우(overflow) 상태가 되므로 삽입 연산을 수행하지 못하고 연산 종료
stack(top) <- x;
- 오버플로우 상태가 아니라면 스택의 top이 가리키는 위치에 x를 삽입함