الخوارزميات وهياكل البيانات في Kotlin: دليل شامل للمبتدئين

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

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

ابدأ الدورة

مقدمة: لماذا نتعلم الخوارزميات وهياكل البيانات في Kotlin؟



Kotlin هي لغة برمجة حديثة وموجزة وآمنة، تُستخدم بنشاط في تطوير تطبيقات Android وخدمات الواجهة الخلفية وحتى تطبيقات سطح المكتب. لكن القدرة على كتابة الكود بلغة Kotlin ليست سوى نصف النجاح. لتصبح مطورًا جيدًا حقًا، عليك أن تفهم كيفية عمل الخوارزميات وهياكل البيانات.



لماذا يحتاج المبتدئ إلى ذلك؟ أولاً، معرفة الهياكل الأساسية (القوائم، المكدسات، قوائم الانتظار، جداول التجزئة) تساعد في كتابة كود أكثر كفاءة وسرعة. ثانيًا، الخوارزميات هي أساس حل المشكلات التقنية في المقابلات. ثالثًا، إنه ببساطة ممتع: تبدأ في رؤية المنطق والرياضيات خلف الكود.



في هذه المقالة، سنستعرض الخوارزميات الرئيسية وهياكل البيانات في Kotlin من الصفر. جميع الأمثلة ستكون بسيطة وواضحة وجاهزة للتشغيل. هيا بنا!



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



المصفوفات والقوائم



في Kotlin، هناك نوعان رئيسيان من المجموعات: Array (حجم ثابت) و List (ديناميكي). لمعظم المهام، من الأسهل استخدام List.



fun main() {    // مصفوفة بحجم ثابت    val numbersArray = arrayOf(1, 2, 3, 4, 5)    println("المصفوفة: ${numbersArray.joinToString()}")

// قائمة قابلة للتعديل val mutableList = mutableListOf(10, 20, 30) mutableList.add(40) println("القائمة بعد الإضافة: $mutableList")

// قائمة غير قابلة للتعديل val immutableList = listOf(100, 200, 300) println("القائمة غير القابلة للتعديل: $immutableList")}


المكدس (Stack)



يعمل المكدس وفق مبدأ LIFO (Last In, First Out) - آخر من يدخل هو أول من يخرج. لا يحتوي Kotlin على فئة مكدس مدمجة، ولكن من السهل تنفيذها باستخدام MutableList.



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(1) stack.push(2) stack.push(3)

println("العنصر العلوي: ${stack.peek()}") // 3 println("نقوم بإخراج: ${stack.pop()}") // 3 println("الآن العنصر العلوي: ${stack.peek()}") // 2}


قائمة الانتظار (Queue)



تعمل قائمة الانتظار وفق مبدأ FIFO (First In, First Out) - أول من يدخل هو أول من يخرج. في Kotlin، من المناسب استخدام LinkedList من Java لهذا الغرض.



import java.util.LinkedList

class Queue<T> { private val elements = LinkedList<T>()

fun enqueue(item: T) = elements.add(item) fun dequeue(): T? = elements.poll() fun peek(): T? = elements.peek() fun isEmpty() = elements.isEmpty() fun size() = elements.size}

fun main() { val queue = Queue<String>() queue.enqueue("الأول") queue.enqueue("الثاني") queue.enqueue("الثالث")

println("نخدم: ${queue.dequeue()}") // الأول println("التالي: ${queue.peek()}") // الثاني}


2. خوارزميات الفرز في Kotlin



الفرز الفقاعي (Bubble Sort)



خوارزمية بسيطة ولكنها بطيئة. مناسبة للتعلم، ولكن ليس للمشاريع الحقيقية.



fun bubbleSort(arr: MutableList<Int>) {    val n = arr.size    for (i in 0 until n - 1) {        for (j in 0 until n - i - 1) {            if (arr[j] > arr[j + 1]) {                val temp = arr[j]                arr[j] = arr[j + 1]                arr[j + 1] = temp            }        }    }}

fun main() { val list = mutableListOf(64, 34, 25, 12, 22, 11, 90) bubbleSort(list) println("تم الفرز بالفقاعات: $list")}


ب

المدونات

توصيات الكتب