7 هياكل بيانات (Data structures) هم الأكثر شيوعًا واستخدامًا
إذا كنت تريد أن تصبح مبرمجًا محترفًا، فيجب عليك إتقان مجموعة من هياكل البيانات الأساسية (Primary data structures)؛ فسيساعدك ذلك على التميز وجعل سيرتك الذاتية قوية ومطلوبة.
في هذه المقالة، سأشارك معك 7 هياكل بيانات هم الأكثر شيوعًا واستخدامًا في الحياة العملية للمبرمج.
أهم 7 هياكل بيانات يجب أن يتعلمها كل مبرمج
ما المقصود بهيكل البيانات؟
هيكل البيانات هي طريقة محددة لتخزين وتنظيم البيانات في الكمبيوتر؛ وذلك لاستخدامها بسهولة في أداء العمليات البرمجية. حيث أنه لا تصلح عملية التحليل أو العمليات البرمجية الأخرى أن تتم على بيانات غير منظمة.
تقوم معظم المؤسسات بجمع البيانات وتخزينها بطريقة غير منظمة وغير فعالة في تسهيل استخدام البيانات لاحقًا وهنا تأتى أهمية هياكل البيانات.
هناك أنواع (أشكال) مختلفة من هياكل البيانات، وكل نوع يستخدم لحل مشكلة معينة، وليس كل المشكلات يتم حلها بنفس هيكل البيانات. لذا، فإن مهمة المبرمج هي فهم بنية البيانات ووضعها في هيكل مناسب لتسهيل عملية تحليل البيانات وجعلها تتم بسرعة وبكفاءة عالية بحيث يمكن استخدامها لاحقًا لحل المشكلات أو تحقيق هدف معين.
هياكل البيانات هي واحدة من أهم الأساسيات في مجال هندسة البرمجيات وعلوم الكمبيوتر ويتم استخدامها في معظم أنظمة البرمجيات.
- هياكل بيانات خطية
-
-
- المصفوفات (Arrays)
- القوائم المترابطة (Linked lists)
- الطوابير (Queues)
- الأكوام (Stacks)
-
- هياكل بيانات غير خطية
-
-
- التريز (Trees)
- الرسوم البيانية (Graphs)
-
والآن دعنا نعرض لك قائمة لأكثر 7 هياكل بيانات شيوعًا واستخدامًا:
1. المصفوفات (Arrays)
هيكل البيانات الأول في قائمتنا لأشهر 7 هياكل بيانات هو أحد أبسط هياكل البيانات الموجودة. المصفوفة عبارة عن هيكل خطي ثابت الحجم يخزن عناصر متعددة من نفس نوع البيانات بشكل متسلسل.
تحتوي المصفوفة على عناصر داخل كل حاوية وتصطف الحاويات جميعها في تسلسل.
لإضافة عنصر، تحتاج إلى إنشاء مصفوفة جديدة بحجم متزايد (+ 1)، ثم نسخ العناصر الموجودة في المصفوفة الأولى ثم تضعها في المصفوفة الجديدة ثم تقوم بإضافة العنصر الجديد إليها.
2. القوائم المرتبطة (Linked lists)
القائمة المرتبطة هي هيكل بيانات خطي، حيث يتم ترتيب العناصر بالترتيب الخطي وربطها (توصيلها) ببعضها البعض. لهذا السبب لا يمكنك الوصول إلى البيانات بشكل عشوائي؛ ولكن تستطيع الوصول إلى البيانات بالترتيب فقط (بالتتابع).
في القائمة المترابطة، يُعرف العنصر الأول في القائمة باسم «الرأس»، ويُعرف العنصر الأخير باسم «الذيل».
كل عنصر يسمى «عقدة»، وكل منها يحتوي على مؤشر ومفتاح في القائمة المترابطة. يأخذك المؤشر إلى العقدة التالية المعروفة باسم «التالي».
يمكنك زيارة كل عنصر في القائمة واستخدام قيمته أو تغييرها من خلال المرور على العناصر من الرأس إلى الذيل (في الاتجاه الأمامي) حتى تصل إلى العنصر المطلوب.
3. الأكوام (Stacks)
الاستاك هو أيضًا هيكل بيانات خطي، تكون العناصر فيه مرصوصة عنصر فوق الآخر. أخر عنصر يتم وضعه على قمة الاستاك هو أول عنصر يتم سحبه (Last In First Out) ولهذا السبب يُعرف الاستاك باسم هيكل LIFO. هذا يعني أنه يمكن الوصول إلى عنصر المركز الأخير أولاً.
يمكنك دفع (إضافة) عنصر جديد إلى الاستاك باستخدام (push function) ويتم إضافة العنصر الجديد على قمة الاستاك أو بوب (حذف) عنصر من الاستاك عن طريق (pop function) وهنا يتم حذف العنصر الموجود على قمة الاستاك.
4. الطوابير (Queues)
هيكل الطوابير (Queues) يشبه هيكل الـ Stack، لكنها لا تتبع طريقة LIFO في عملية إضافة وحذف العناصر. حيث تتبع الطوابير طريقة الـ (First In First Out) أو الـ (FIFO). مما يعني أن أول عنصر يتم إضافته إلى الطابور هو أول عنصر يتم حذفه منه تمامًا، مثل الطوابير في الحياة الواقعية.
تخيل معى مجموعة من الأشخاص الواقفين في طابور لكي يشتروا تذاكر القطار من نافذة بيع التذاكر، سيدخل الشخص الأول إلى النافذة كي يشترى التذكرة، وبقية الركاب ينتظرون وبمجرد ما ينتهى الشخص الأول من عملية شراء التذكرة الخاصة به سيقوم بالخروج من الطابور ليدخل الشخص الذي يليه لكي يشترى التذكرة وهكذا، وعند قدوم أي راكب جديد سيقف في نهاية الطابور حتى يأتي دوره.
5. جداول التجزئة (Hash tables)
جدول التجزئة ويعرف أيضا بـ (جدول هاش، جداول التقطيع، خريطة هاش، خريطة تقطيع، قاموس هاش) هو أحد هياكل البيانات الشهيرة والذي يملك خصائص المصفوفات الترابطية (associative array) ويمكن باستخدامه اسناد قيمة (Value) إلى مفتاح ما (Key) في ذاكرة الحاسوب. والبحث عن قيم محددة بسرعة كبيرة مقارنة بهياكل البيانات الأخرى.
6. التريز (Trees)
هيكل بيانات أخر يسمى شجرة، وهو هيكل بيانات يشبه الشجرة في تكوينه، حيث يتم ربط البيانات معًا كما هو الحال في القائمة المترابطة، ولكنها منظمة بشكل هرمي، تمامًا مثل التمثيل المرئي لشجرة عائلة الشخص.
هناك أنواع مختلفة من هيكل بيانات الـ Tree مثل:
- Binary search tree
- Red-black tree
- B tree, treap
- Splay tree
- N-ary tree
- AVL tree
وكل نوع مناسب لتطبيقات معينة.
7. الرسم البياني (Graph)
الرسم البياني هو هيكل بيانات غير خطي يتكون من مجموعة ثابتة (محدودة) من العقد أو الرؤوس وتتصل بمجموعة من الحواف، والحواف هي الأقواس أو الخطوط التي تربط العقد ببساطة في الرسم البياني.
الرسوم البيانية رائعة لحل مشاكل العالم الحقيقي، وتعتبر هيكل بيانات شائع ومنتشر.
لقد استعرضنا معًا أهم هياكل البيانات الأكثر شيوعًا والتي يجب أن يتعلمها كل مبرمج يريد أن يكون متمكنًا ومميزًا في مجال صناعة البرمجيات.
هيكل البيانات هو طريقة لتخزين وتنظيم البيانات بحيث يمكن استخدامها بسهولة لأداء العمليات ولحصول على النتائج المرجوة. المصفوفات والقوائم المرتبطة والأكوام وقوائم الانتظار وطاولات التجزئة والأشجار والأكوام والرسوم البيانية تُعد من هياكل البيانات الأساسية.
تحتاج إلى تعلم البرمجة أولًا قبل تعلم هياكل البيانات والخوارزميات، فيجب أن يكون لديك معرفة أساسية بالبرمجة لبدء تعلم DSA (هياكل البيانات والخوارزميات).
هناك تطبيقات غير محدودة في الحياة الواقعية لاستخدام هياكل البيانات (Data structures). فيما يلي بعض الأمثلة لاستخدام هياكل البيانات في العالم الحقيقي.
- في لعبة الشطرنج لتخزين الحركات المحتملة.
- على مواقع التواصل الاجتماعي (مثل Facebook) لتخزين معلومات الصداقة مثلًا (أي من المرتبط بمن).
- في متصفح الإنترنت لتنفيذ وظيفة الخطوة الخلفية (Backward).
الخوارزميات وهياكل البيانات مفاهيم وثيقة الصلة بعلوم الكمبيوتر، ولكنها ليست الشيء نفسه.
الخوارزمية Algorithm هي مجموعة من التعليمات لأداء مهمة محددة أو حل مشكلة معينة. وهي إجراء خطوة بخطوة يأخذ بيانات الإدخال وينتج بيانات الإخراج. ويمكن اعتبار الخوارزمية Algorithm كوصفة أو مخطط لحل مشكلة ما.
من ناحية أخرى، فإن هيكل البيانات Data structure هو طريقة لتنظيم وتخزين البيانات في برنامج أو نظام كمبيوتر؛ ويعد طريقة خاصة لترتيب البيانات في الذاكرة، بحيث يمكن الوصول إليها ومعالجتها بكفاءة.
ويتمثل الاختلاف الرئيس بين الخوارزميات وهياكل البيانات Algorithms and Data Structures في أن الخوارزمية تحدد تسلسلًا معينًا من الخطوات لحل مشكلة ما، بينما يحدد هيكل البيانات طريقة تنظيم البيانات والوصول إليها في الذاكرة.
غالبًا ما تُستخدم الخوارزميات وهياكل البيانات معًا في حل المشكلات الحسابية. قد تتطلب خوارزمية معينة هيكل بيانات محدد لمعالجة بيانات الإدخال بكفاءة، ويمكن أن يكون لاختيار هيكل البيانات تأثير كبير على كفاءة الخوارزمية؛ لذلك، فإن فهم كل من الخوارزميات وهياكل البيانات أمر ضروري للمبرمجين لتطوير حلول برمجية فعالة.