Tekrar - Öncelik Kuyruğu
Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 41 / 57.
Görev
OrtaHerhangi bir önceliklendirilmiş tür için çalışan bir öncelik kuyruğu oluşturun. Prioritized (priority ile birlikte) ve Job ile Ticket veri sınıfları sağlanmıştır.
TaskQueue<T : Prioritized>, en yüksek önceliğe sahip öğeyi (eşit öncelikler arasında ilk ekleneni) kaldıran veya döndürenpush(item),pop()vepeek()işlevlerine ya danull'a, ayrıcasize,items()(pop sırasındaki salt okunur bir anlık görüntü) ve en fazlanöğeyi pop edip bunlarıList<T>olarak döndürendrain(n)işlevlerine sahiptir.- Genel
countUrgent(queue, min)işlevi, herhangi bir önceliklendirilmiş türdeki kuyruğu alır ve öğelerinden kaç tanesinin en az bu önceliğe sahip olduğunu döndürür.
Sağlanan kod job build 3, ticket 17 5 ada, pop jobs, peek tickets, drain 2 (tickets) veya sizes komutlarını okur, her yanıtı yazdırır ve son olarak hâlâ kuyrukta bulunan acil işlerin ve biletlerin sayısıyla birlikte urgent: ifadesini yazdırır.
Kodunuz TaskQueue.kt, Prioritized.kt, Job.kt ve Ticket.kt dosyalarına yazılmalıdır. Main.kt sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
fun main() {
// Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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)}")
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıfları TanımlamaBirincil Yapıcılarinit Blokları ve Doğrulamaİkincil YapıcılarTekrar - Kütüphane Kartı4Kalıtım
Açık Sınıflar ve Alt SınıflarÜyeleri Geçersiz Kılmasuper ve YapıcılarSoyut SınıflarTekrar - Personel Dizini2Özellikler ve Kapsülleme
Özel ErişimcilerGörünürlük DeğiştiricileriÖzel Setter'larlazy ve lateinitTekrar - Banka Hesabı5Arayüzler
Arayüz BildirimleriVarsayılan MetotlarBirden Çok ArayüzTür Olarak ArayüzlerÖzet - Ödeme Yöntemleri8Generic'ler
Generic FonksiyonlarGeneric SınıflarTür Kısıtlamalarıin ve out ile VaryansTekrar - Öncelik Kuyruğu11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç AlmaKendi başına pratik yap: Kotlin playground