الخوارزميات وهياكل البيانات بلغة Kotlin: دليل عملي

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

الخوارزميات وهياكل البيانات بلغة Kotlin: من النظرية إلى التطبيق

Kotlin هي لغة برمجة حديثة تجمع بين إيجاز Python وقوة Java. لكتابة كود فعال، من الضروري فهم كيفية عمل الخوارزميات وهياكل البيانات. في هذه المقالة، سنشرح المفاهيم الأساسية باستخدام أمثلة بلغة Kotlin، والتي ستساعدك على كتابة برامج سريعة وموثوقة.

ستكون المادة مفيدة لكل من المبتدئين والمطورين الذين يرغبون في تنظيم معرفتهم. يمكن تشغيل جميع الأمثلة في بيئة IntelliJ IDEA أو في مترجم عبر الإنترنت.



1. هياكل البيانات الأساسية في Kotlin

توفر المكتبة القياسية لـ Kotlin مجموعة غنية من هياكل البيانات. دعنا نستعرض أهمها.



القوائم (List, MutableList)

القوائم هي مجموعات مرتبة من العناصر. تميز Kotlin بين القوائم القابلة للتغيير وغير القابلة للتغيير.

fun main() {    // قائمة غير قابلة للتغيير    val fruits = listOf("Яблоко", "Банан", "Апельсин")        // قائمة قابلة للتغيير    val numbers = mutableListOf(1, 2, 3)    numbers.add(4)    numbers.removeAt(1)        println(fruits[0]) // Яблоко    println(numbers)   // [1, 3, 4]}


المجموعات (Set, MutableSet)

المجموعات تخزن عناصر فريدة. مفيدة للتحقق من التكرارات.

fun main() {    val uniqueNumbers = setOf(1, 2, 2, 3, 3, 3)    println(uniqueNumbers) // [1, 2, 3]        val mutableSet = mutableSetOf("a", "b")    mutableSet.add("c")    println(mutableSet.contains("b")) // true}


القواميس (Map, MutableMap)

القواميس تخزن أزواج المفتاح-القيمة. مشابهة لجدول التجزئة.

fun main() {    val capitals = mapOf(        "Россия" to "Москва",        "США" to "Вашингтон",        "Франция" to "Париж"    )        println(capitals["Россия"]) // Москва        // قاموس قابل للتغيير    val scores = mutableMapOf("Иван" to 85)    scores["Мария"] = 92    scores["Иван"] = 90}


2. تنفيذ هياكل البيانات الكلاسيكية

أحيانًا لا تكون الهياكل القياسية كافية. دعنا نرى كيفية تنفيذ المكدس والطابور يدويًا.



المكدس (Stack)

يعمل المكدس وفق مبدأ LIFO (Last In, First Out). يُستخدم في المحللات، التراجع عن الإجراءات، واجتياز الرسوم البيانية.

class Stack<T> {    private val elements = mutableListOf<T>()        fun push(item: T) = elements.add(item)    fun pop(): T? = if (isEmpty()) null else elements.removeAt(elements.size - 1)    fun peek(): T? = elements.lastOrNull()    fun isEmpty() = elements.isEmpty()    fun size() = elements.size}

fun main() { val stack = Stack<Int>() stack.push(10) stack.push(20) stack.push(30) println(stack.pop()) // 30 println(stack.peek()) // 20 println(stack.size()) // 2}


الطابور (Queue)

يعمل الطابور وفق مبدأ FIFO (First In, First Out). يُستخدم في أنظمة معالجة المهام.

class Queue<T> {    private val elements = mutableListOf<T>()        fun enqueue(item: T) = elements.add(item)    fun dequeue(): T? = if (isEmpty()) null else elements.removeAt(0)    fun peek(): T? = elements.firstOrNull()    fun isEmpty() = elements.isEmpty()}

fun main() { val queue = Queue<String>() queue.enqueue("Задача 1") queue.enqueue("Задача 2") queue.enqueue("Задача 3") println(queue.dequeue()) // Задача 1 println(queue.peek()) // Задача 2}


3. خوارزميات الفرز بلغة Kotlin

الفرز هو عملية أساسية. سنشرح ثلاث خوارزميات شائعة.



الفرز السريع (QuickSort)

واحدة من أكثر الخوارزميات فعالية بمتوسط تعقيد O(n log n).

fun quickSort(arr: IntArray, low: Int, high: Int) {    if (low < high) {        val pi = partition(arr, low, high)        quickSort(arr, low, pi - 1)        quick                

المدونات

توصيات الكتب