JAVA Stack 과 Queue 자료구조 및 활용 방법

Noahddd·2024년 10월 25일

JAVA

목록 보기
8/12

공부의 정리 및 복습을 위한 기록입니다.

Stack과 Queue 두 자료구조에 대해서 공부한 것을 정리하고자 한다.

우선 프로그래밍 언어를 떠나서 데이터 자료구조에는 스택 큐 데크 트리 등 여러 자료구조가 있다.
오늘은 그 중에서 스택 과 큐에 대하여 정리 및 자바에서는 어떻게 구현하고 어떤 메서드가 있는지 공부한 내용을 정리하려고 한다.

우선 스택은 LIFO(Last In First Out)구조를 가지고있다.

위 사진과 같이 데이터를 넣고 뺄 때 가장 마지막에 들어간 데이터부터 나오며 데이터의 입구와 출구가 한 개 밖이 없는 형태로 볼 수있다.

반면 큐는 FIFO(First IN First Out)구조를 가지고 있다.


위 사진과 같이 큐는 데이터가 들어간 순서대로 나오며, 입구와 출구가 하나의 통로로 연결되어 있는 형태이다. 유턴이 불가능한 터널의 형태로 볼 수 있다.

큐와 스택이 합쳐진 구조로 Depue도 있다. 이 데크는 나중에 CS부분 내용을 정리하면서 다른 자료구조들과 함께 자세하게 정리하도록 하겠다.

JAVA에서는 이러한 스택과 큐 자료구조를 이용한 클래스와 인터페이스를 제공한다.

우선 Stack 클래스이다.
Stack 클래스의 대표적인 메서드는

메서드내용
peek()저장된 객체 중 마지막(맨 위)에 저장된 객체를 반환
push()객체를 저장
pop()저장된 객체 중 마지막(맨 위)에 저장된 객체를 반환 후 삭제
empty()저장된 객체가 있는지 없는지를 반환
serch()주어진 객체를 찾아서 그 위치를 반환 객체가 없다면 -1를 반환
remove()주어진 인덱스요소에 있는 객체를 반환 후 삭제

와 같이 있으며 다음 예제를 보면서 메서드를 익혀보도록 하겠다.

        Stack<Integer> stack = new Stack<>();

        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);


        System.out.println(stack.peek()); // 마지막에 들어간 요소 = 4
        System.out.println(stack.pop()); // 마지막에 들어간 요소를 반환 = 4 후 삭제
       System.out.println(stack.remove(1)); // 인덱스 1에 위치하는 요소를 반환 = 2 후 삭제 
        System.out.println(stack); // 모든 스택에 요소를 반환 

위와 같이 코드를 실행 시킨다면
4
4
2
[1,3]
위와 같이 출력 되는것을 볼 수 있다.

다음은 Queue 인터페이스의 메서드이다.
자바에서 큐는 인터페이스의 형태로 제공되기 때문에
바로 사용할 수 없고 이것을 구현할 수 있는 구현클래스를 사용해야 한다. 여러 구현 클래스중 오늘은
Linkedlist를 이용하여 예제를 만들어 보았다.

다음은 큐의 대표적인 메서드이다.

메서드내용
peek()저장된 객체 중 처음에 저장된 객체를 반환
offer()객체를 저장 성공 시 True, 실패 시 False 반환
poll()저장된 객체 중 처음에 저장된 객체를 반환 후 삭제
isEmpty()저장된 객체가 있는지 없는지를 반환
contains()주어진 객체를 찾아서 있으면 True, 없으면 False 반환

위와 같은 메서드가 있다.

다음 예제 코드를 보며 메서드를 익혀보도록 하겠다.

        Queue<Integer> queue = new LinkedList<>();

        queue.offer(1);
        queue.offer(12);
        queue.offer(123);
        queue.offer(1234);

        System.out.println(queue.peek()); // 가장 처음 객체 = 1
        System.out.println(queue.poll()); // 가장 처음 객체 = 1 반환 후 삭제
        System.out.println(queue.contains(123)); // 123이 있는지 확인 True 
        System.out.println(queue); // 전체 리스트 

위와 같이 코드를 작성 후 실행시키면 출력 결과는
1
1
True
[12, 123, 1234]
가 나오는 것을 볼 수있다.

이번에는 Stack과 Queue에 대한 자료구조와 JAVA에서 제공하는 클래스와 인터페이스, 메서드를 정리해 보았다. 다음에는 CS내용을 공부하면서 데이터 자료구조에 대하여 정리를 해보도록 하겠다.

공부하며 정리와 복습을 위해 저장한 기록입니다. 틀린 부분 및 개선할 부분이 있다면 알려주시면 감사하겠습니다 !

profile
꿈이 많은 개발자 호소인

0개의 댓글