Stack
후입선출 (Last In First Out; LIFO) 자료구조로 마지막에 들어온 데이터가 먼저 나가는 구조이다.
(First In Last Out;FILO 라고 하기도 함)
그림에서 확인할 수 있듯이 가장 마지막에 들어온 데이터가 먼저 나간다.
(한글이나 엑셀 등의 되돌리기 기능과 유사하게 생각하면 될 듯 하다.)
구조의 밑을 Bottom이라고 하며, 메모리에 새로 데이터가 들어오고 나가는 위치가 Top.
데이터 입력 연산은 Push, 데이터 출력 연산은 Pop이라고 한다.
조회연산은 Peak라고 하는데 Top이 가리키는 데이터를 조회할 수 있다.(단순 조회일 뿐 데이터 변화 없다.)
자바에서의 Stack 사용
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
//스택에 값 입력
System.out.println(stack); //[1,2,3,4,5]
System.out.println(stack.pop()); //가장 마지막에 들어간 데이터 빼기.
//pop은 출력하는 값을 리턴하기에 print할 수 있음
System.out.println(stack); //[1,2,3,4]
System.out.println(stack.pop());
System.out.println(stack); //[1,2,3]
System.out.println(stack.peek()); //마지막에 들어간 값 확인!!빼진 않음. 여기선 3
System.out.println(stack.contains(1)); //해당 값을 가지고 있는지. true/false
System.out.println(stack.size()); //stack에 들어있는 size. 여기선 1,2,3이니 3
System.out.println(stack.empty()); //stack이 비어있는지 여부. true/false
stack.clear(); //스택 비우기
System.out.println(stack);
//비어있는 상태에서 pop하면 에러 발생
}
}
직접 구현하는 경우는 배열이나 리스트 이용하여 구현 가능하다.
(자료 구조는 처음이라 추가학습 후에 내용 추가 예정입니다.)
코딩 테스트 문제를 풀다가 계속 컴파일 에러가 발생했는데 peek로 값을 가져왔을 때 타입이 문제였다.
(클래스 이름 출력을 해보니 Integer로 나왔다.)
숫자 비교였는데 int로 형변환 하니 에러가 해결되었다.
조심하자ㅠㅠ