경험의 기록

코틀린에서는 큐와 스택을 기본 라이브러리로 제공하지 않기 때문에,

자바의 큐와 스택을 가져와 사용한다.

또한 별도의 라이브러리를 사용할 필요 없이 큐와 스택의 성질을 이용하면 (큐는 선입선출, 스택은 후입선출)

ArrayList로도 구현할 수 있다.

 

 

import java.util.*

fun main(args:Array<String>){
    var q : Queue<Int> = LinkedList() // 큐로 선언하고 LinkedList 로 할당
    q.add(1)    // 객체를 큐에 추가 (큐가 가득찬 상태이면 illegalStateException 발생)
    q.offer(3)  // 객체를 큐에 추가 (큐가 가득찬 상태이면 false 반환)
    println(q)

    println(q.element())    // 맨 앞 객체 리턴 (큐가 비어있는 상태이면 NoSuchElementException 발생)
    println(q.elementAt(1)) // 인덱스 값의 객체 리턴
    println(q.peek())   // 맨 앞 객체 리턴 (큐가 비어있는 상태이면 false 반환)

    q.remove()  // 삭제하면서 객체 반환 (큐가 비어있는 상태이면 NoSuchElementException 발생)
    var tmp = q.poll()  // 삭제하면서 객체 반환 (큐가 비어있는 상태이면 false 반환)
    println(q)
    println("두번째 삭제한 객체 : $tmp")

}

ArrayList 로 구현한 큐

// ArrayList 로 구현한 큐

fun main(args:Array<String>){

    var q = arrayListOf<Int>()

    q.add(1) // == add
    q.add(3)

    println(q)

    q.removeAt(0) // == remove

    print(q[0]) // == element
}

 

 

스택

import java.util.*

fun main(args:Array<String>){
    var s = Stack<Int>()

    s.push(1) // 객체를 스택에 추가
    s.push(3)

    s.peek() // 맨 위의 객체 반환 (비어 있는 상태이면 EmptyStackException 발생)
    println(s)

    s.pop() // 맨 위의 객체 삭제하고 반환 (비어 있는 상태이면 EmptyStackException 발생)
    println(s)
}

 

ArrayList 로 구현한 스택

// ArrayList 로 구현한 스택

fun main(args:Array<String>){

    var s = arrayListOf<Int>()

    s.add(1) // == push
    s.add(3)

    s.removeAt(s.size-1) // == pop

    println(s[s.size-1]) // == peek

    println(s.isEmpty())
    println(s.isNotEmpty())

    println(s.size)
}

 

우선순위 큐

import java.util.*

fun main(args: Array<String>) = with(Scanner(System.`in`)){
    val q = PriorityQueue<Int>() // 오름차순

    val q2 = PriorityQueue<Int>(Collections.reverseOrder()) // 내림차순

    q.addAll(listOf(1,5,2,4,3))
    q2.addAll(listOf(1,5,2,4,3))

    // 우선순위가 높은 것부터 반환
    while(!q.isEmpty()) print("${q.poll()} ")
    println()
    while(!q2.isEmpty()) print("${q2.poll()} ")

}

 

 

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading