"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > الغوص العميق في بنية بيانات المصفوفة

الغوص العميق في بنية بيانات المصفوفة

تم النشر بتاريخ 2024-09-02
تصفح:243

ما هي المصفوفة؟

  • المصفوفة عبارة عن مجموعة من العناصر، يتم تحديد كل منها بواسطة فهرس أو مفتاح.
  • المصفوفات لها حجم ثابت وديناميكي
  • عناصر متجانسة → جميع العناصر في المصفوفة من نفس نوع البيانات.
  • عناصر غير متجانسة → السماح بأنواع بيانات مختلفة في نفس المصفوفة.
// Homogeneous 
int[] intArray = new int[5]; // Array of integers String[] 
stringArray = new String[5]; // Array of strings

// Heterogeneous
mixedArray = [1, "hello", 3.14, True]  # Mixed data types in one list

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

  • الفهرسة: الفهرسة الصفرية في معظم لغات البرمجة.
  • الحجم: حجم ثابت (ثابت)، لا يمكن تغييره ديناميكيًا (باستثناء اللغات ذات المصفوفات الديناميكية).
  • تخصيص الذاكرة: تخصيص الذاكرة المتجاورة لعناصر المصفوفة. مما يعني أن كل عنصر يقع مباشرة بجوار العنصر السابق في الذاكرة. وهذا ممكن لأن جميع العناصر لها نفس الحجم، مما يسمح للنظام بحساب عنوان الذاكرة لأي عنصر باستخدام الفهرس الخاص به.

Deep dive into Array Data Structure

عمليات المصفوفة

  • الإدراج: يتضمن عادةً عناصر متغيرة، تعقيد الوقت O(n).
  • الحذف: كما هو الحال مع الإدراج، قد تحتاج العناصر إلى النقل. باستثناء الفهرس الأخير
  • الاجتياز: التكرار عبر جميع العناصر، تعقيد الوقت O(n).
  • وقت الوصول: التعقيد الزمني O(1) للوصول إلى عنصر باستخدام فهرسه.

أنواع المصفوفات

  • المصفوفة أحادية البعد: أبسط شكل، مثل القائمة.
  • مصفوفة متعددة الأبعاد: مصفوفات من المصفوفات (على سبيل المثال، مصفوفة ثنائية الأبعاد).
  • المصفوفة المسننة: مصفوفات ذات أطوال مختلفة للمصفوفات الفرعية.
  • المصفوفات الديناميكية (على سبيل المثال، ArrayList في Java): المصفوفات التي يمكن أن تنمو في الحجم ديناميكيًا.

مزايا المصفوفات

  • الكفاءة: O(1) وقت الوصول للعناصر.
  • استخدام الذاكرة: الاستخدام الفعال للذاكرة بسبب التخزين المتجاور.
  • سهولة الاستخدام: تبسيط إدارة البيانات والعمليات مثل الفرز والبحث

عيوب المصفوفات

  • الحجم الثابت: لا يمكن تغيير الحجم بمجرد الإعلان عنه. باستثناء المصفوفة الديناميكية
  • تكلفة الإدراج/الحذف: O(n) لإدراج عنصر أو حذفه، خاصة في المنتصف.
  • إهدار الذاكرة: العناصر غير المستخدمة لا تزال تشغل مساحة.

تطبيقات العالم الحقيقي للمصفوفات

  • تخزين البيانات: شائع في البرمجة لتخزين مجموعات من العناصر.
  • خوارزميات الفرز: تم تصميم العديد من خوارزميات الفرز للمصفوفات (على سبيل المثال، QuickSort، MergeSort).
  • عمليات المصفوفة: تستخدم المصفوفات ثنائية الأبعاد لعمليات المصفوفة في الرياضيات والرسومات.
  • تنفيذ الأكوام وقوائم الانتظار: يمكن تنفيذ هياكل البيانات الأساسية باستخدام المصفوفات.

أفضل الممارسات مع المصفوفات

  • تجنب النسخ غير الضرورية: انتبه للعمليات التي تتطلب نسخ العناصر.
  • استخدم المصفوفات الديناميكية عند الحاجة: إذا كان الحجم غير مؤكد، ففضل المصفوفات الديناميكية.
  • الاستفادة من الوظائف المضمنة: الاستفادة من الوظائف الخاصة باللغة لعمليات المصفوفة.
  • فحص الحدود: تحقق دائمًا من شروط الحدود لتجنب IndexOutOfBoundsException.

مثال على المصفوفة الثابتة والديناميكية في GO

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    // Static Array
    var staticArr [5]int64
    staticArr[0] = 1
    staticArr[1] = 2
    staticArr[2] = 3
    staticArr[3] = 4
    staticArr[4] = 5
    elementSize := unsafe.Sizeof(staticArr[0])
    totalSize := elementSize * uintptr(len(staticArr))
    fmt.Printf("Memory used by static array: %d bytes\n", totalSize)
    fmt.Println()

    // Dynamic Array (Slice)
    dynamicArr := make([]int32, 0, 5)
    before := unsafe.Sizeof(dynamicArr[0])
    beforeTotal := before * uintptr(len(dynamicArr))
    fmt.Printf("Memory used by dynamic array (before): %d bytes\n", beforeTotal)

    // Append elements to dynamic array
    for i := 0; i 




          

            
        
بيان الافراج تم نشر هذه المقالة على: https://dev.to/chandra179/deep-dive-into-array-data-structure-1g82?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3