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
https://tech-monster.tistory.com/159
'자료구조' 카테고리의 다른 글
[자료구조] 그래프 (0) | 2023.04.19 |
---|---|
[자료구조] 그래프의 표현 (0) | 2023.04.14 |
[자료구조] 우선순위 큐(Priority Queue) (0) | 2023.03.26 |
[자료구조] 큐(Queue) (0) | 2023.03.26 |
[자료구조] 스택(Stack) (0) | 2023.01.26 |