اقرأ في هذا المقال
- ما هي هياكل البيانات Data Structure؟
- خصائص هياكل البيانات
- أنواع هياكل البيانات
- أهمية هياكل البيانات
- العمليات الرئيسية
ما هي هياكل البيانات Data Structure؟
هياكل البيانات وهي بنية مسبقة التعريف متخصصة بتنظيم البيانات ومعالجتها واسترجاعها وتخزينها.على الرغم من وجود العديد من أنواع الهياكل الأساسية والمتقدمة، فقد صُمم كل نوع لترتيب البيانات بطريقة تُناسب غرضًا محددًا بحيث يمكن الوصول إلى هذه البيانات والعمل معها بطرق مناسبة، وبعض هياكل البيانات عبارة عن مكون مدمج في لغة البرمجة، وقد يتطلب البعض الآخر تضمين (Include) مكتبة من قبل استخدام الهيكل.
خصائص هياكل البيانات:
غالبًا ما يتم تصنيف هياكل البيانات حسب خصائصها.الخصائص الممكنة هي:
- خطي أو غير خطي: تصف هذه الخاصية ما إذا كانت عناصر البيانات مرتبة في تسلسل في الذاكرة “مثل مصفوفة”، أو مرتبة بطريقة عشوائية “مثل الأشجار (trees)”.
- متجانسة أو غير متجانسة: تصف هذه الخاصية ما إذا كانت جميع عناصر البيانات في مخزن معين من نفس النوع أو من أنواع مختلفة.
- ثابت أو ديناميكي: تصف هذه الخاصية كيفية تجميع هياكل البيانات.هياكل البيانات الثابتة لها أحجام وهياكل ومواقع ذاكرة ثابتة في وقت الترجمة (compile time)، وهياكل البيانات الديناميكية لها أحجام وهياكل ومواقع ذاكرة يمكن أن تتقلص أو تتوسع حسب الاستخدام.
أنواع هياكل البيانات:
يتم تحديد أنواع بنية البيانات من خلال أنواع العمليات المطلوبة أو أنواع الخوارزميات التي سيتم تطبيقها. تشمل هذه الأنواع:
المصفوفات (Arrays): المصفوفة تخزِن مجموعة من العناصر في مواقع ذاكرة متجاورة، ويتم تخزين العناصر التي هي من نفس النوع معًا بحيث يمكن حساب موضع كل عنصر أو استرجاعه بسهولة، كما يمكن أن تكون المصفوفات ثابتة أو مرنة في الطول.
الستاك (Stack): يخزن مجموعة من العناصر بالترتيب الخطي الذي يتم تطبيق العمليات عليه، يكون هنا استرجاع البيانات على شكل ما أُدخل من البيانات أولاً هو ما يصرف أخيرا (LIFO) أو ما أُدخل من البيانات أولاً هو ما يصرف أولاً (FIFO).
الكيو (Queue): تقوم الكيو بتخزين مجموعة من العناصر المشابهة بعملها للستاك؛ ومع ذلك، يكون استرجاع البيانات فقط على شكل ما أُدخل من البيانات أولاً هو ما يصرف أولاً (FIFO).
القوائم المترابطة (Linked lists): تقوم القائمة المرتبطة بتخزين مجموعة من العناصر بترتيب خطي، ويحتوي كل عنصر أو عقدة (node) في القائمة المرتبطة على عنصر البيانات بالإضافة إلى مرجع بالعنصر التالي في القائمة.
الأشجار (Trees): الشجرة تخزن مجموعة من العناصر بطريقة هرمية، وترتبط كل عقدة (node) بالعقد الأخرى ويمكن أن تحتوي على قيم فرعية متعددة (تُعرف أيضًا باسم الأطفال).
الرسوم البيانية (Graphs): يخزن الرسم البياني مجموعة من العناصر بطريقة غير خطية، وتتكون الرسوم البيانية من مجموعة محدودة من العقد، تُعرف أيضًا بالرؤوس (vertices)، والخطوط التي تربطها تُعرف باسم الحواف (edges). هذه مفيدة لتمثيل أنظمة الحياة الواقعية مثل شبكات الكمبيوتر.
أشجار الجذر (Tries): تُعرف أيضًا باسم أشجار البادئة أو شجرة الكلمات الرئيسية، وهي نوع من هياكل البيانات تخزن الـ (strings) كعناصر بيانات يمكن تنظيمها في رسم بياني مرئي.
جداول التجزئة (Hash tables): يخزن جدول التجزئة أو خريطة التجزئة مجموعة من العناصر في مصفوفة ترابطية (associative array)، ويستخدم جدول التجزئة دالة تجزئة (hash function) لتحويل المؤشر إلى المصفوفة التي تحتوي على العنصر المطلوب.
أهمية هياكل البيانات:
- تسمح هياكل البيانات للمبرمجين بإدارة البيانات بالطرق الأكثر فعالية والتي تعزز أداء الخوارزمية.
- أنها تسمح بالتنفيذ نهج علمي على الأنظمة التقليدية.عندما يتعلق الأمر بجوانب مثل سرعة المعالجة أو المعالجة أو الطلبات المتعددة والبحث من خلال العديد من السجلات، فإن هياكل البيانات تثبت فائدتها.
- أنها تسمح بالاستخدام الفعال للذاكرة.تعمل هياكل البيانات على تحسين استخدام الذاكرة، ويحدث هذا تأثيرًا عادةً في المواقف التي تتضمن معالجة مجموعات بيانات ضخمة.
- هياكل البيانات قابلة لإعادة الاستخدام.يمكن دمجها كحزمة (package) واحدة في مكتبة، ويمكن استخدام هذه المكتبات في مواقف مختلفة من قبل مختلف أصحاب المصلحة حسب الحاجة.
- إنها تتيح حلولًا متعددة لمشكلة معينة، ممّا يسمح للمستخدم بتحديد بنية البيانات التي ستحل المشكلة بأفضل طريقة.
العمليات الرئيسية:
العمليات الرئيسية أو الشائعة التي يمكن إجراؤها على هياكل البيانات هي:
البحث: يمكننا البحث عن أي عنصر في بنية البيانات.
الفرز: يمكننا فرز عناصر بنية البيانات إما بترتيب تصاعدي أو تنازلي.
الإدراج: نستطيع إدراج العنصر الجديد في بنية البيانات.
التحديث: كما يمكننا تحديث العنصر، أي يمكننا استبدال العنصر بعنصر آخر.
الحذف: يمكننا كذلك إجراء عملية الحذف لإزالة العنصر من بنية البيانات.