또한 별도의 라이브러리를 사용할 필요 없이 큐와 스택의 성질을 이용하면 (큐는 선입선출, 스택은 후입선출)
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()} ")
}