- 데이터를 선입선출, First In First Out (FIFO) 원칙을 따르는 자료구조
- 밑바닥이 뚫린 프링글스라 생각하자, Stack과 다르게 밑바닥이 뚫려있어 처음 과자를 먹을때 밑바닥에 있는것부터 먹게되는 과정이라 생각하면 된다
특징
- FIFO 원칙 : 가장 먼저 넣은 데이터가 가장 먼저 출력된다
- 양방향 접근 : 데이터 추가는 뒤쪽, rear에서 추가되고, 삭제는 앞쪽, front에서 삭제된다
장점과 단점
- Queue는 데이터 처리 순서를 명확하게 유지할 수 있어, 순차적인 처리 작업에 유용하다
- 예시로 Korail의 열차 예매 시스템으로 먼저 들어온 순서대로 표를 예매하는 형태
- 허나 데이터 접근은 front에서만 가능하여, 중간 데이터에 접근할려면 많은 데이터들을 제거해야 하는 경우가 생기기도 한다
예시 코드
class Queue<T> {
private val elements: MutableList<T> = mutableListOf()
fun enqueue(item: T) {
elements.add(item)
}
fun dequeue(): T? {
if (!elements.isEmpty()) {
return elements.removeAt(0)
}
return null
}
fun peek(): T? {
if (!elements.isEmpty()) {
return elements[0]
}
return null
}
}
val queue = Queue<Int>()
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
println(queue.dequeue()) // 1
println(queue.peek()) // 2