- 예어
시퀀스의 한쪽 끝에 엔터티가 있는 시퀀스로 관리되는 엔터티 모음입니다.
첨가물시퀀스의 다른 쪽 끝에 있는 엔터티입니다.
제거하다에 의해 수정될 수 있습니다
요소가 추가되는 시퀀스의 끝을 큐의 뒤라고 하고 요소가 제거되는 끝을 큐의 앞이라고 합니다.
큐의 끝에 항목을 추가하는 것을 큐에 넣기(enqueue)라고 하고 앞쪽에서 항목을 제거하는 것을 큐에서 빼기(dequeue)라고 합니다.
선입선출(FIFO) 데이터 구조입니다.
즉, 대기열에 추가된 첫 번째 항목이 제거될 첫 번째 항목입니다.
- 대기열 구현
1. 큐 완충기의 기능을 수행하다
버퍼는 데이터가 한 곳에서 다른 곳으로 이동하는 동안 일시적으로 데이터를 저장하는 저장 영역입니다.
버퍼는 종종 큐에 한 속도로 데이터를 쓰고 다른 속도로 데이터를 읽어 타이밍을 조정하기 위해 메모리에 큐잉 알고리즘을 구현합니다.
두 번째 키워드 너비 우선 검색 우선위해 사용됩니다
BFS는 현재 깊이에서 모든 노드를 검색합니다.
발견되었지만 아직 탐색되지 않은 하위 노드를 추적하려면 일반적으로 대기열과 같은 추가 스토리지가 필요합니다.
DFS는 무한 분기에서 길을 잃고 솔루션 노드에 도달하지 못할 수 있지만 BFS는 도달할 수 없습니다.
BFS는 메모리를 추가로 소모하는 단점이 있습니다.
- 시간적 복잡성
1. 삽입 O(1)
2. 삭제 O(1)
3. 검색 O(n)
- 화신
public class ArrayQueue { //배열로 Queue 구현
//배열의 크기가 유한하다는 단점이 있다.
int MAX = 1000;
int front; //헤드, dequeue 시 사용
int rear; //꼬리, enqueue 시 사용
int () queue;
public ArrayQueue() {
front = rear = 0;
queue = new int(MAX); //배열 생성
}
public boolean queueisEmpty() { //queue에 아무것도 들어있지 않은지 판단하는 함수
return front == rear;
}
public boolean queueisFull() { //queue가 가득 차 공간이 없는지 판단하는 함수
if(rear == MAX-1) {
return true;
}else
return false;
}
public int size() { //queue에 현재 들어가 있는 데이터의 개수를 return
return front-rear;
}
public void push(int value) {
if(queueisFull()) {
System.out.println("Queue is Full");
return;
}
queue(rear++) = value; //rear가 위치한 곳에 값을 넣어주고 rear를 증가시킨다.
}
public int pop() {
if(queueisEmpty()) {
System.out.println("Queue is Empty");
return -1;
}
int popValue = queue(front++);
return popValue;
}
public int peek() {
if(queueisEmpty()) {
System.out.println("Queue is Empty");
return -1;
}
int popValue = queue(front);
return popValue;
}
}
import java.util.LinkedList;
import java.util.Queue;
public class Main { //자바에서 제공해주는 Queue 클래스로 구현
public static void main(String() args) {
Queue<Integer> queue = new LinkedList<Integer>();
queue.offer(1);
queue.offer(2);
queue.offer(3);
queue.offer(4);
queue.offer(5);
while(!
queue.isEmpty()) {
System.out.println(queue.poll());
}
}
}