Ôn tập: Hàng đợi ưu tiên
Thuộc phần Lập trình hướng đối tượng trong hành trình Kotlin của Coddy. Bài học 41 trên 57.
Thử thách
Trung bìnhHãy xây dựng một hàng đợi ưu tiên hoạt động với mọi kiểu có mức ưu tiên. Prioritized (có priority) và các lớp dữ liệu Job và Ticket đã được cung cấp.
TaskQueue<T : Prioritized>cópush(item),pop()vàpeek(), dùng để xóa hoặc trả về phần tử có mức ưu tiên cao nhất (phần tử được đưa vào trước nếu có mức ưu tiên bằng nhau) hoặcnull,size,items()(ảnh chụp chỉ đọc theo thứ tự lấy ra) vàdrain(n), lấy ra tối đanphần tử rồi trả về chúng dưới dạngList<T>.- Hàm tổng quát
countUrgent(queue, min)nhận một hàng đợi chứa kiểu bất kỳ có mức ưu tiên và trả về số phần tử có mức ưu tiên ít nhất bằng mức đó.
Code được cung cấp đọc các lệnh job build 3, ticket 17 5 ada, pop jobs, peek tickets, drain 2 (tickets) hoặc sizes, in từng phản hồi và cuối cùng in urgent: cùng với số công việc và vé khẩn cấp vẫn còn trong hàng đợi.
Code của bạn nằm trong TaskQueue.kt, Prioritized.kt, Job.kt và Ticket.kt. Main.kt chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.
Tự làm thử
fun main() {
// Đoạn code đầu vào/đầu ra đã có sẵn: giữ nguyê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)}")
}
Tất cả bài học trong Lập trình hướng đối tượng
1Lớp và đối tượng
Làm việc với tệpĐịnh nghĩa lớpHàm khởi tạo chínhKhối init và kiểm tra tính hợp lệHàm khởi tạo phụÔn tập: thẻ thư viện4Kế thừa
Lớp mở và lớp conGhi đè thành viênsuper và hàm khởi tạoLớp trừu tượngÔn tập: Danh bạ nhân viên2Thuộc tính và tính đóng gói
Trình truy cập tùy chỉnhBộ sửa đổi phạm vi truy cậpSetter riêng tưlazy và lateinitÔn tập: tài khoản ngân hàng5Giao diện
Khai báo giao diệnPhương thức mặc địnhNhiều giao diệnGiao diện như kiểu dữ liệuÔn tập: Phương thức thanh toán8Kiểu tổng quát
Hàm tổng quátLớp tổng quátRàng buộc kiểuTính biến thiên với in và outÔn tập: Hàng đợi ưu tiênTự luyện tập: Playground Kotlin