큐
데이터를 일시적으로 쌓아 놓는 자료구조로,
먼저 넣은 데이터를 가장 먼저 꺼내는 선입선출(FIFO) 구조이다.
인큐 (en-queue) : 큐에 데이터 넣는 작업 → 복잡도 O(1)
디큐 (de-queue) : 큐에서 데이터를 꺼내는 작업 → 복잡도 O(n)
front (맨 앞) : 데이터 나오는 쪽
rear (맨 뒤) : 데이터 넣는 쪽
큐는 한 쪽 끝은 front로 정해 삭제 연산만 수행하고,
다른 한 쪽 끝은 rear로 정해 삽입 연산만 수행한다!
큐 선언
import java.util.LinkedList;
import java.util.Queue;
Queue<Integer> queue = new LinkedList<>();
Queue<String> queue = new LinkedList<>();
자바에서 큐는 LinkedList를 활용해 생성한다.
Queue<Integer, String등 Element> queue = new LinkedList<>() 와 같이 선언한다.
큐 값 추가
Queue<Integer> queue = new LinkedList<>();
queue.add(1); // queue에 1 추가
queue.add(2); // queue에 2 추가
queue.offer(3); // queue에 3 추가
큐에 값을 추가하려면,
add나 offer메소드를 사용해야 한다.
add 메소드의 경우, 삽입에 성공 시 true를 반환하고,
큐에 여유 공간이 없어 삽입에 실패하면 IllegalStateException을 발생시킨다.
큐 값 삭제
Queue<Integer> queue = new LinkedList<>();
queue.offer(1); // queue에 1 추가
queue.offer(2); // queue에 2 추가
queue.offer(3); // queue에 3 추가
queue.poll(); // queue에 첫번째 값을 반환하고 제거 비어있다면 null
queue.remove(); // queue에 첫번째 값 제거
queue.clear(); // queue 초기화
큐에서 값을 삭제하려면 poll이나 remove 메소드를 사용해야 한다.
poll 메소드는 큐가 비어있으면 null을 반환한다.
pop을하면 가장 앞쪽의 원소 값이 제거된다.
큐의 모든 요소를 제거하기 위해선 clear 메소드를 사용한다.
poll = 맨 앞 데이터 추출 후 삭제
peek = 맨 앞 데이터 조회만 (삭제는 x)
큐에서 가장 먼저 들어간 값 출력
Queue<Integer> queue = new LinkedList<>();
queue.offer(1); // queue에 1 추가
queue.offer(2); // queue에 2 추가
queue.offer(3); // queue에 3 추가
queue.peek(); // queue의 첫번째 값 참조
큐에서 첫번째로 저장된 값을 참조하고 싶으면
peek 메소드를 활용한다.
'Algorithm' 카테고리의 다른 글
StringTokenizer 사용법 (문자열 분리) (0) | 2023.01.05 |
---|---|
[알고리즘] 자바 Deque(덱) 사용법 (0) | 2022.08.01 |
[알고리즘] 선형 탐색 (배열 검색 알고리즘) (0) | 2022.07.30 |
자바 compareTo 메소드 (문자열, 숫자 값 비교) (0) | 2022.07.14 |
특정 규칙에 의한 배열 정렬 Arrays.sort Comparator (0) | 2022.07.14 |