JeongJin's Blog

데크의 개념과 자바로 구현해보기 본문

1일1공부/선형자료구조

데크의 개념과 자바로 구현해보기

정진킴 2023. 9. 13. 08:20

1. 데크란?

  •  Stack와 Queue를 합친 상태

2. 데크 기능

  • 양방향에서 삽입 삭제 가능한 구조

                              - 데이터 삽입 함수 : add() (addLast와 동일), offer() (offerLast와 동일), addFirst(), addLast(), offerFirst(),

                                                             offerLast()

                              - 데이터 삭제 함수 : remove(), poll(), removeLast(), pollLast()

                              - 데크 공간이 비어 있을 시 예외 반환 함수 : add(), remove()

                              - 데크 공간이 비어 있을 시 false 또는 null 반환 함수 : offer(), poll()

3. 일부 기능 제한 데크

  • 입력제한 데크(Scroll)
    • 한 쪽의 입력을 제한한 데크

  • 출력제한 데크 (Shelf)
    • 한 쪽의 출력을 제한한 데크

- 직접 사용할 경우는 없겠지만 개념정도 알아두면 좋을 거 같다.


import java.util.ArrayDeque;
import java.util.Deque;

public class Main {

	public static void main(String[] args) {
		Deque deque = new ArrayDeque();

		// Front 부분 입력
		deque.addFirst(1);
		deque.addFirst(2);
		deque.addFirst(3);
		System.out.println(deque); // [3, 2, 1]

		// Rear 부분 입력
		deque.addLast(10);
		deque.addLast(20);
		deque.addLast(30);
		System.out.println(deque); // [3, 2, 1, 10, 20, 30]

		// Front 부분 출력
		System.out.println(deque.removeFirst()); // 3
		System.out.println(deque); // [2, 1, 10, 20, 30]

		// Rear 부분 출력
		System.out.println(deque.removeLast()); // 30
		System.out.println(deque); // [2, 1, 10, 20]

		System.out.println(deque.removeLast()); // 20
		System.out.println(deque.removeLast()); // 10
		System.out.println(deque.removeLast()); // 1
		System.out.println(deque.removeLast()); // 2
		System.out.println(deque); // []

		System.out.println(deque.pollLast()); // null
		System.out.println(deque.removeLast()); // NoSuchElementException
	}

}