개발 지식 기록/자료구조

스택(Stack)

엉망진창좌충우돌 2023. 6. 13. 02:56

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로 형변환 하니 에러가 해결되었다.

조심하자ㅠㅠ

'개발 지식 기록 > 자료구조' 카테고리의 다른 글

큐(Queue)  (1) 2023.06.14