반응형

Queue란?

queue는 사전적 의미로 줄, 줄을 서서 기다리다 라는 뜻을 가지고 있습니다.

queue 자료구조 또한 사전적 의미대로 입력받은 값들을 줄을 세워서 저장합니다.

ex) 빈 queue에 5, 3, 2, 1 순서대로 삽입하면 꺼낼 때는 5, 3, 2, 1 순서로 나오게 됩니다.

이러한 특성을 가지는 큐 자료구조는 선입선출(First In First Out - FIFO)

즉, 줄을 서서 기다리듯이 먼저 들어온 것이 먼저 나가게 되는 구조입니다.

일상생활에서 큐 자료구조와 비슷한 경우를 생각해보면 손님이 가득찬 식당 앞에서 줄 서서 기다리고 있는 상태와 동일합니다.

 

코틀린에서 queue 사용하기

코틀린 자체적으로는 Queue가 구현되어있지 않기 때문에 직접 구현하거나 java에 있는 Queue를 사용해야합니다.

Queue는 인터페이스 이므로 구현체로 LinkedList(클래스)를 사용하여 구현할 수 있습니다.

Queue와 LinkedList를 사용하기 위하여 java.util.*를 import해야합니다.

import java.util.*

Queue의 기능들

import java.util.*

fun main() {

    val queue: Queue<Int> = LinkedList() // queue = []

    // add, offer
    queue.add(1) // queue = [1]
    queue.offer(2) // queue = [1,2]
    queue.add(3) // queue = [1,2,3]
    queue.offer(4) // queue = [1,2,3,4]

    // peek
    println(queue.peek()) // 1 출력 - queue = [1,2,3,4]
    // size
    println(queue.size) // 4 출력 - queue = [1,2,3,4]
    
    // remove, poll
    println(queue.remove()) // 1 출력 - queue = [2,3,4]
    println(queue.poll()) // 2 출력 - queue = [3,4]

    // size
    println(queue.size) // 2 출력 - queue = [3,4]
    // element
    println(queue.element()) // 3 출력 - queue = [3,4]

    // isEmpty or isNotEmpty
    println(queue.isEmpty()) // false 출력 - queue = [3,4]
    println(queue.isNotEmpty()) // true 출력 - queue = [3,4]

    // 큐가 빌 때 까지 모든 값 poll
    while (queue.isNotEmpty()) {
        println(queue.poll())
    }
    // 3 출력 - queue = [4]
    // 4 출력 - queue = []
}

Queue 선언

Queue는 val queue: Queue<Int> = LinkedList()와 같은 형태로 선언하여 사용할 수 있습니다. < > 안에는 큐의 원소로 들어갈 자료형을 명시해줍니다.

Queue 값 삽입

Queue는 add() 혹은 offer()을 사용하여  값을 삽입할 수 있습니다. 

add는 queue의 용량 제한이 발생하면 Exception이 발생하고

offer은 Exception을 발생시키지 않습니다.

LinkedList에서는 메모리의 한계까지 LinkedList를 만들지 않는 이상 용량 제한이 발생하기 힘들기 때문에 add, offer 둘 다 사용해도 큰 차이는 없습니다.

LinkedList를 사용하였기 때문에 시간 복잡도는 O(1)

Queue 첫 값 확인

Queue는 element() 혹은 peek()을 사용하여 첫 값을 확인할 수 있습니다.

element는 큐에 값이 없다면 NoSuchElementException을 발생시키고

peek은 null을 반환해줍니다.

LinkedList를 사용하였기 때문에 시간 복잡도는 O(1)

Queue 크기 확인

Queue는 size()를 사용하여 현재 Queue의 크기(원소들의 개수)를 확인할 수 있습니다.

Queue 첫 값 확인 및 삭제

Queue는 remove() 혹은 poll()을 사용하여 첫 값을 확인하고 삭제할 수 있습니다.

remove는 큐에 값이 없다면 NoSuchElementException을 발생시키고

poll은 null 반환해줍니다.

LinkedList를 사용하였기 때문에 시간 복잡도는 O(1)

Queue가 비었는지 확인

Queue는 isEmpty(), itNotEmpty()를 이용하여 현재 큐가 비었는지, 원소가 존재하는지 확인할 수 있습니다.

isEmpty()는 Queue가 비었을 경우 true를 반환, 그렇지 않다면 false를 반환.

isNotEmpty()는 Queue가 비었을 경우 false를 반환, 그렇지 않다면 true를 반환.

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기