- 마지막에 입력된 자료가 가장 먼저 출력되는 LIFO 방식으로 작동한다.
- top이라는 인덱스 위치를 통해 삽입(push)과 삭제(pop)가 이루어지며, 초기상태의 top은 0또는 –1이 된다.
- Top의 최대 크기는 스택의 크기에 의해 결정된다.
- 저장장치에 물리적으로 어떻게 표현되느냐가 스택을 특징짓는 것이 아니라 스택이라는 논리적 구조의 동작이 스택의 특징을 결정한다.
응용분야
- 서브루틴 호출시 복귀 주소(return address) 저장
- 순환 프로그램(Recursive Program) 수행 시
- 인터럽트 발생 시 상태 저장
- 후위식(Postfix) 변환
- 버퍼
- 트리 운행 시(inorder, postorder, outorder)
- 그래프에서 깊이 우선 탐색(DFS)
- 퀵 정렬(quick sort) 수행 시
- 미로 찾기
JAVA 코드
package com.cs0210;
public class StackArr {
private int top;
private int size;
private char[] arr;
public StackArr(int size) {
top = -1;
this.size = size;
arr = new char[size];
}
public boolean isEmpty() {
return (top == -1);
}
public boolean isFull() {
return (top == this.size - 1);
}
public void push(char data) {
if (isFull())
System.out.println("포화 상태입니다.");
else {
arr[++top] = data;
}
}
public char pop() {
if (isEmpty()) {
System.out.println("비어있습니다.");
return 0;
} else {
return arr[top--];
}
}
public char peek() {
if (isEmpty()) {
System.out.println("비어있습니다.");
return 0;
} else {
return arr[top];
}
}
public static void main(String[] args) {
int size = 3;
StackArr stack = new StackArr(size);
stack.push('A');
System.out.println(stack.peek());
stack.push('B');
System.out.println(stack.peek());
stack.push('C');
System.out.println(stack.peek());
System.out.println("pop : " + stack.pop());
System.out.println(stack.peek());
System.out.println("pop : " + stack.pop());
System.out.println(stack.peek());
System.out.println("pop : " + stack.pop());
System.out.println(stack.peek());
System.out.println("pop : " + stack.pop());
System.out.println(stack.peek());
System.out.println("pop : " + stack.pop());
}
}