Queue<E> 인터페이스
클래스로 구현된 스택과는 달리 자바에서 큐 메모리 구조는 별도의 인터페이스 형태로 제공됩니다.
큐를 상속받는 하위 인터페이스는 다음과 같습니다.
1) Deque<E>
2) BlockingDeque<E>
3) BlockingQueue<E>
4) TransferQueue<E>
큐 메모리 구조는 선형 메모리 공간에 데이터를 저장하면서 선입선출의 시맨틸을 따르는 자료구조입니다.
즉, 먼저 저장된 데이터가 먼저 인출됩니다.
Queue 메소드
Queue를 활용한 BFS 구현
import java.io.*;
import java.util.*;
/* 인접 리스트를 이용한 방향성 있는 그래프 클래스 */
class Graph {
private int V; // 노드의 개수
private LinkedList<Integer> adj[]; // 인접 리스트
/** 생성자 */
Graph(int v) {
V = v;
adj = new LinkedList[v];
for (int i=0; i<v; ++i) // 인접 리스트 초기화
adj[i] = new LinkedList();
}
/** 노드를 연결 v->w */
void addEdge(int v, int w) { adj[v].add(w); }
/** s를 시작 노드으로 한 BFS로 탐색하면서 탐색한 노드들을 출력 */
void BFS(int s) {
// 노드의 방문 여부 판단 (초깃값: false)
boolean visited[] = new boolean[V];
// BFS 구현을 위한 큐(Queue) 생성
LinkedList<Integer> queue = new LinkedList<Integer>();
// 현재 노드를 방문한 것으로 표시하고 큐에 삽입(enqueue)
visited[s] = true;
queue.add(s);
// 큐(Queue)가 빌 때까지 반복
while (queue.size() != 0) {
// 방문한 노드를 큐에서 추출(dequeue)하고 값을 출력
s = queue.poll();
System.out.print(s + " ");
// 방문한 노드와 인접한 모든 노드를 가져온다.
Iterator<Integer> i = adj[s].listIterator();
while (i.hasNext()) {
int n = i.next();
// 방문하지 않은 노드면 방문한 것으로 표시하고 큐에 삽입(enqueue)
if (!visited[n]) {
visited[n] = true;
queue.add(n);
}
}
}
}
}
'JAVA' 카테고리의 다른 글
stream 활용해 list 최소, 최대값 구하기 (0) | 2022.11.20 |
---|---|
2차원 배열 정렬, 문자열 배열 정렬 (1) | 2022.10.03 |
정렬과 lambda (0) | 2022.09.29 |
PriorityQueue ( 우선순위큐 ) (0) | 2022.09.27 |
putIfAbsent (0) | 2022.08.11 |