본문 바로가기
자료구조&알고리즘

[자료구조] Kotlin으로 자료구조 이해하기 - Queue(큐)

by JongSeok 2023. 1. 23.

Queue

Queue의 사전적 정의는 '줄, 줄을 서서 기다리다'라는 의미를 갖습니다.

자료구조로서 Queue는 선입선출(FIFO : First In First Out)의 방식으로 데이터를 저장하는 구조를 의미합니다.

예를 들어, 빈 Queue에 1, 2, 3, 4, 5의 순서로 데이터가 들어간다면 들어간 순서대로 1, 2, 3, 4, 5의 순서로 나오게 됩니다.

먼저 들어간게 먼저 나오는 선입선출이라는 키워드를 생각한다면 이해가 쉽습니다.

Queue는 위와 같이 선언할 수 있습니다. Stack과 마찬가지로 자바의 Queue를 import하여 사용하지만 Queue는 인터페이스이기 때문에 LinkedList 클래스로 초기화해서 사용하겠습니다.

 

Queue에서 제공하는 주요 기능은 다음과 같습니다.

  • add, offer : Queue에 데이터를 삽입합니다. Queue 특성에 맞게 앞서 삽입된 데이터 뒤에 추가됩니다. add는 Queue에 용량 제한이 발생하면 Exception을 발생시키지만 offer는 Exception을 발생시키지 않습니다.
  • poll, remove : Queue의  맨 앞에 있는 데이터를 삭제하고 반환합니다. poll은 Queue가 비어있다면 null을 반환하고, remove는 NoSuchElementException을 발생시킵니다.
  • peek, element : Queue의 맨 앞에 있는 즉, Queue의 첫 번째 데이터를 반환합니다. Queue가 비어있다면 peek은 null을 반환하지만 element는 NoSuchElementException를 발생시킵니다.
  • size : Queue의 크기(원소의 개수)를 반환합니다.
  • empty : Queue가 비어있는지 확인합니다. 비어있다면 true, 비어있지 않다면 false를 반환합니다.

Queue에 커서를 두고 확인할 수 있습니다.


Queue 사용예시

import java.util.LinkedList
import java.util.Queue

fun main() {
    // 선언 시 queue의 자료형은 Queue이지만 LinkedList로 초기화
    val queue : Queue<Int> = LinkedList()

    /* 삽입 */
    queue.add(1)    // [1]
    queue.add(2)    // [1, 2]
    queue.add(3)    // [1, 2, 3]
    queue.add(4)    // [1, 2, 3, 4]
    queue.offer(5)    // [1, 2, 3, 4, 5]

    /* 삭제 */
    queue.remove()   // [2, 3, 4, 5]
    queue.poll()     // [3, 4, 5]

    /* 첫 번째 요소 */
    println(queue.peek())      // 3
    println(queue.element())   // 3

    /* Queue의 크기 */
    println(queue.size)    // 3

    /* Queue가 비었는지 확인 */
    println(queue.isEmpty())    // false
    println(queue.isNotEmpty())    // true

    /* Queue 비우기 */
    while (queue.isNotEmpty()) {
        queue.poll()
    }

    println(queue)    // queue : []
}
728x90
반응형