Ringkasan, Priority Queue
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Kotlin di Coddy. Pelajaran 41 dari 57.
Tantangan
SedangBuat priority queue yang berfungsi untuk tipe apa pun yang memiliki prioritas. Prioritized (dengan priority) dan data class Job serta Ticket sudah disediakan.
TaskQueue<T : Prioritized>memilikipush(item),pop()danpeek(), yang menghapus atau mengembalikan item dengan prioritas tertinggi (item yang dimasukkan lebih dulu jika prioritasnya sama) ataunull,size,items()(snapshot hanya-baca dengan urutan pop) dandrain(n), yang melakukan pop hingganitem dan mengembalikannya sebagaiList<T>.- Fungsi generik
countUrgent(queue, min)menerima queue dengan tipe apa pun yang memiliki prioritas dan mengembalikan jumlah item yang memiliki prioritas setidaknya sebesar nilai tersebut.
Code yang disediakan membaca perintah job build 3, ticket 17 5 ada, pop jobs, peek tickets, drain 2 (tickets) atau sizes, mencetak setiap balasan, lalu mencetak urgent: diikuti jumlah jobs dan tickets berprioritas tinggi yang masih berada dalam queue.
Tulis kodemu di TaskQueue.kt, Prioritized.kt, Job.kt dan Ticket.kt. Main.kt berisi code input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
fun main() {
// Kode input/output yang disediakan: biarkan apa adanya
val input = generateSequence(::readLine).toList()
val jobs = TaskQueue<Job>()
val tickets = TaskQueue<Ticket>()
for (cmd in input) {
val p = cmd.split(" ")
when (p[0]) {
"job" -> jobs.push(Job(p[1], p[2].toInt()))
"ticket" -> tickets.push(Ticket(p[1].toInt(), p[2].toInt(), p[3]))
"pop" -> println("popped " + (if (p[1] == "jobs") jobs.pop() else tickets.pop()))
"peek" -> println("next " + (if (p[1] == "jobs") jobs.peek() else tickets.peek()))
"drain" -> println("drained " + tickets.drain(p[1].toInt()).map { it.customer })
else -> println("jobs ${jobs.size}, tickets ${tickets.size}")
}
}
println("urgent: ${countUrgent(jobs, 4) + countUrgent(tickets, 4)}")
}
Semua pelajaran di Pemrograman Berorientasi Objek
1class dan object
Bekerja dengan fileMendefinisikan classKonstruktor utamaBlok init dan validasiKonstruktor sekunderRingkasan: Kartu Perpustakaan2property dan Enkapsulasi
Accessor KustomModifier VisibilitasSetter Privatlazy dan lateinitRingkasan: Rekening Bank5Interface
Mendeklarasikan Interfacemethod DefaultBeberapa InterfaceInterface sebagai TipeUlasan: Metode Pembayaran11Proyek: Pengelolaan Perpustakaan
Buku dan AnggotaPeminjaman BukuLatihan sendiri: Playground Kotlin