자료구조

[자료구조] 덱(Deque)

라임온조 2023. 3. 24. 15:39

1. 개념

앞으로 넣을 수 있고 뺄 수 있으면서, 뒤로도 넣을 수 있고 뺄 수 있는 자료구조

 

2. 특징

  • 스택과 큐의 특징을 모두 가질 수 있음

 

3. 자바에서 구현

덱의 여러 연산을 모아 놓은 인터페이스가 있고, 이 인터페이스를 실제로 구현한 여러 클래스가 있다. ArrayDeque, LinkedBlockingDeque, ConcurrentLinkedDeque, LinkedList 가 클래스의 종류며 구현 방법에 따라 종류가 나뉜다.

1) ArrayDeque

  • array로 구현
  • 내부 배열의 크기가 resizable 함
  • 용량 제한이 없음, 기본 크기를 16으로 하고 용량 넘어가면 2배씩 증가시킴
  • Thread-Safe하지 않아서 멀티 쓰레드 환경에서는 문제가 있음
  • null 추가 불가
  • 끝에 삽입, 삭제만 할 경우 사용하면 효율적

2) LinkedList

  • 양방향 연결 리스트로 구현
  • null 추가 가능
  • 가리키는 링크가 필요하기 때문에 ArrayDeque보다 더 많은 메모리를 소모
  • 순회하면서 삽입, 삭제 할 경우 사용하면 효율적

 

4. 자바에서 연산

1) addFirst()

덱의 앞쪽에 삽입

2) removeFirst()

덱의 앞쪽에 있는 걸 삭제한 후 삭제한 결과를 리턴. 만약 비어있는 덱에서 삭제를 했을 경우 예외 발생

3) addLast()

덱의 맨 뒤에 삽입

4) removeLast()

덱의 맨 뒤에 있는 걸 삭제한 후 삭제한 결과를 리턴. 만약 비어있는 덱에서 삭제를 했을 경우 예외 발생

5) gerFirst()

덱의 맨 앞에 있는 걸 제거하지 않은 채 리턴. 비어 있는 상태에서 이 메서드를 실행하면 예외 발생

6) peekFirst()

덱의 맨 앞에 있는 걸 제거하지 않은 채 리턴. 비어 있는 상태에서 이 메서드를 실행하면 null 리턴

7) getLast()

덱의 맨 뒤에 있는 걸 제거하지 않은 채 리턴. 비어 있는 상태에서 이 메서드를 실행하면 예외 발생

8) peekLast()

덱의 맨 뒤에 있는 걸 제거하지 않은 채 리턴. 비어 있는 상태에서 이 메서드를 실행하면 null 리턴

9) isEmpty()

덱이 비어있으면 true, 비어 있지 않으면 false를 리턴

 

 

+ 스택대신 queue를 사용해야 하는 이유

https://crazykim2.tistory.com/581

 

[JAVA] Deque/ArrayDeque(데크) 개념 및 사용법 정리

안녕하세요 이번 포스팅에서는 Deque와 ArrayDeque에 대해서 알아보겠습니다 목차 Deque란? Deque 선언하기 Deque 값 추가하기 Deque 값 삭제하기 Deque 크기 구하기 Deque 값 출력하기 Deque란? Deque란 Double-Ended

crazykim2.tistory.com

https://tech-monster.tistory.com/159

 

Deque, LinkedList 와 ArrayDeque

이번 시간에는 Deque 인터페이스를 알아보고 이의 구현체인 LinkedList와 ArrayDeque를 알아보고 비교할 것이다. 1. Deque란? 원소의 추가와 삭제를 둘 다 끝부분에서 지원하는 선형 collection. Deque라는 이

tech-monster.tistory.com

https://velog.io/@djawnstj/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-Java%EC%9D%98-LinkedList%EC%99%80-ArrayDeque

 

[자료구조] Java의 LinkedList와 ArrayDeque

요즘 Do it 알고리즘 코딩테스트 - 자바편이란 책으로 알고리즘 공부를 하고있다. 책의 슬라이딩 윈도우 챕터에 나오는 백준 11003번 문제 - 최소값 찾기를 풀이대로 푸는데 문제가 발생했다. 문제

velog.io

 

 

'자료구조' 카테고리의 다른 글

[자료구조] 그래프  (0) 2023.04.19
[자료구조] 그래프의 표현  (0) 2023.04.14
[자료구조] 우선순위 큐(Priority Queue)  (0) 2023.03.26
[자료구조] 큐(Queue)  (0) 2023.03.26
[자료구조] 스택(Stack)  (0) 2023.01.26