dalgorithm
달공의 개발기
dalgorithm
전체 방문자
오늘
어제
  • 분류 전체보기 (170)
    • Back-end (0)
    • Java (11)
    • 자료구조 (7)
    • Network (31)
    • Database (9)
    • Baekjoon Online (24)
    • 클라우드 (6)
    • Android (15)
      • Kotlin (14)
    • AI (27)
      • Machine Learning&Deep Learn.. (27)
    • Web (23)
      • Webhacking (17)
      • WebProgramming (6)
    • 기술면접 (1)
      • JAVA&자료구조 (0)
      • Spring (0)
      • 컴퓨터구조&운영체제 (0)
      • 네트워크 (0)
      • 데이터베이스 (0)
    • CTF 스터디 (15)
    • 대외활동 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • python #백준
  • 코드리뷰
  • 데이터베이스
  • cs
  • 인공지능
  • kotlin
  • 머신러닝
  • Guacamole
  • 클라우드
  • 포너블
  • 딥러닝
  • 웹해킹
  • java
  • db
  • 침입탐지
  • 자바
  • 네트워크
  • gcp
  • CTF
  • 자료구조

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dalgorithm

달공의 개발기

[자료구조] 데크
자료구조

[자료구조] 데크

2022. 8. 16. 21:11
728x90

데크 (Dequeue) 란?

 

https://cdn.programiz.com/sites/tutorial2program/files/deque.png

 

- 양쪽에서 삽입과 삭제가 모두 가능한 구조

- Double-ended-queue의 줄임말

- 입력 제한 데크 : 한 쪽 입력을 제한한 데크 (Scroll)

- 출력 제한 데크 : 한 쪽 출력을 제한한 데크 (Shelf)

 

데크의 연산

● addFirst() : front 부분 입력

● addLast() : last 부분 입력

● removeFirst() / removeLast() : 출력

 

위 메서드 말고도 poll, offer, push, pop 모두 사용 가능하다.


1) 데크의 구현

아래와 같이 ArrayDeque를 통해 Deque를 구현할 수 있다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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);
 
        // Rear 부분 입력
        deque.addLast(10);
        deque.addLast(20);
 
        // Front 부분 출력
        System.out.println(deque.removeFirst());
       
        // Rear 부분 출력
        System.out.println(deque.removeLast());
 
        System.out.println(deque.pollLast());
        System.out.println(deque);
    }
}
Colored by Color Scripter
cs

 

2) 데크의 구현 - ArrayList

MyDeque를 ArrayList를 통해 구현해보는 과정이다. 데크 또한, 빈 데크인지 확인해주는 과정이 필수적이다.

class MyDeque {
    ArrayList list;

    MyDeque1() {
        this.list = new ArrayList();
    }

    public boolean isEmpty() {
        if (this.list.size() == 0) {
            return true;
        } else {
            return false;
        }
    }

데크의 경우, 양방향에서 데이터 삽입, 반출이 가능하기 때문에 각 연산에 해당되는 메서드들을 ArrayList 구조에 맞춰 구현해주어야한다.

 

데이터 삽입

> Front 방향으로 데이터를 삽입할 경우, 위치를 지정해주어야하지만 Last라면 그냥 데이터를 추가하면 된다.

 

데이터 삭제 

> 데이터를 삭제할 때는 데크의 empty 여부를 먼저 확인해주어야한다.

> 해당 위치에 해당하는 데이터의 값을 data 변수에 넣는다.

> 실제 list 안에 해당 위치의 데이터를 삭제하고 data를 반환한다.

 

public void addFirst(int data) {
	this.list.add(0, data);
}

public void addLast(int data) {
	this.list.add(data);
}

public Integer removeFirst() {
	if (this.isEmpty()) {
    	return null;
    }
    int data = (int)this.list.get(0);
    this.list.remove(0);
    return data;
}

public Integer removeLast() {
	if (this.isEmpty()) {
    	return null;
    }
    int data = (int)this.list.get(this.list.size()-1);
    this.list.remove(this.list.size()-1);
    return data;
}
728x90

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

[자료구조] 해시테이블  (0) 2022.08.17
[자료구조] 큐  (0) 2022.08.13
[자료구조] 스택  (0) 2022.08.13
[자료구조] 연결리스트  (0) 2022.08.09
[자료구조] 조합  (0) 2022.08.08
    '자료구조' 카테고리의 다른 글
    • [자료구조] 해시테이블
    • [자료구조] 큐
    • [자료구조] 스택
    • [자료구조] 연결리스트
    dalgorithm
    dalgorithm

    티스토리툴바