فهم هياكل البيانات مع أمثلة من الحياة الواقعية – شرح المصفوفات والقوائم والمكدسات

Amine
11/09/2024

في هذه المقالة، سنستعرض أهم هياكل البيانات المستخدمة في البرمجة من خلال ربطها بأمثلة من الحياة الواقعية. سيساعد هذا الأسلوب في تبسيط المفاهيم وجعلها سهلة الفهم. سنتحدث عن المصفوفات (Arrays)، القوائم المرتبطة (Linked Lists)، الأشجار (Trees)، والمكدسات (Stacks) مع أمثلة توضيحية لكل منها، بالإضافة إلى كود برمجي لكل هيكل بلغة Python أو JavaScript.

المصفوفات (Arrays) – رف الكتب

المصفوفة هي هيكل بيانات بسيط يحتوي على مجموعة من العناصر المرتبة بشكل متتابع في الذاكرة. يمكننا التفكير في المصفوفة مثل رف الكتب حيث تكون كل خانة في الرف مخصصة لكتاب معين. عندما نريد الوصول إلى كتاب، نستخدم رقمه أو موقعه في الرف. هذه العملية سريعة جدًا لأننا نعرف الموقع مسبقًا.

# مثال بسيط على مصفوفة في Python
books = ["Book 1", "Book 2", "Book 3", "Book 4"]
print(books[2])  # النتيجة: Book 3

استخدام المصفوفات مناسب عندما نعرف عدد العناصر مقدماً ونحتاج إلى الوصول إلى العناصر بسرعة. ومع ذلك، إذا كانت البيانات غير ثابتة وتحتاج إلى إدراج أو حذف كثيراً، قد تكون المصفوفة غير فعالة لأنها تتطلب إعادة ترتيب للعناصر.

القوائم المرتبطة (Linked Lists) – سلسلة من الأشخاص

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

# مثال على قائمة مرتبطة بسيطة
class Node:
    def __init__(self, value):
        self.value = value
        self.next = None
class LinkedList:
    def __init__(self):
        self.head = None
    def append(self, value):
        new_node = Node(value)
        if not self.head:
            self.head = new_node
        else:
            current = self.head
            while current.next:
                current = current.next
            current.next = new_node
# إنشاء قائمة مرتبطة وإضافة بعض القيم
linked_list = LinkedList()
linked_list.append("Person 1")
linked_list.append("Person 2")
linked_list.append("Person 3")

القوائم المرتبطة مثالية عندما تكون هناك حاجة لتكرار الإضافات والحذف في بداية أو وسط القائمة. ومع ذلك، الوصول إلى عنصر معين يستغرق وقتًا أطول مقارنة بالمصفوفات لأننا نحتاج إلى المرور على جميع العقد حتى نصل إلى العنصر المطلوب.

المكدسات (Stacks) – مجموعة من الصحون

المكدس هو هيكل بيانات يتبع مبدأ “الأخير يدخل أولاً يخرج” (LIFO). يمكننا تشبيهه بمجموعة من الصحون المكدسة فوق بعضها البعض. عندما نريد استخدام صحن، نأخذ الصحون من الأعلى، وعندما نضيف صحنًا جديدًا، نضعه في الأعلى أيضًا. هذه البنية مفيدة في حالات معينة مثل التراجع عن عمليات (Undo).

# مثال على مكدس في Python
stack = []
stack.append("Plate 1")
stack.append("Plate 2")
stack.append("Plate 3")
print(stack.pop())  # النتيجة: Plate 3

المكدسات تُستخدم عادةً في معالجة البيانات حيث تكون هناك حاجة للتراجع عن العمليات (مثل تحرير النصوص أو التنقل عبر المتصفحات).

الأشجار (Trees) – شجرة العائلة

الأشجار هي هيكل بيانات يتكون من عقد متصلة ببعضها البعض بطريقة متشعبة. كل عقدة يمكن أن تحتوي على عدد من العقد الفرعية. يمكن تشبيه الأشجار بشجرة العائلة حيث تمثل كل عقدة فردًا من العائلة، والفروع تمثل الروابط العائلية بين الأفراد. تُستخدم الأشجار بشكل شائع في تنظيم البيانات الهرمية مثل نظام الملفات أو شجرة القرارات.

# مثال بسيط على شجرة
class Node:
    def __init__(self, value):
        self.value = value
        self.children = []
class Tree:
    def __init__(self, root_value):
        self.root = Node(root_value)
    def add_child(self, parent_node, child_value):
        child_node = Node(child_value)
        parent_node.children.append(child_node)
# إنشاء شجرة عائلة
family_tree = Tree("Grandparent")
parent = Node("Parent")
family_tree.add_child(family_tree.root, "Parent")
family_tree.add_child(parent, "Child")

الأشجار لها استخدامات عديدة مثل البحث عن المسارات، تنظيم البيانات، أو حتى استخدامها في الذكاء الاصطناعي لتحديد أفضل القرارات.

تمارين

  • قم بإنشاء مصفوفة تحتوي على أسماء 5 من أصدقائك واطبع الاسم الثاني.
  • اكتب كودًا لإنشاء قائمة مرتبطة مكونة من 3 عقد تحتوي على أسماء حيواناتك الأليفة.
  • استخدم المكدس لتخزين الأرقام من 1 إلى 5، ثم قم بإزالة الأرقام واحدًا تلو الآخر باستخدام الدالة pop().
  • قم بإنشاء شجرة تمثل شجرة عائلتك حتى الجيل الثالث باستخدام عقد متعددة.

من خلال هذه التمارين، ستتعلم كيفية تطبيق مفاهيم هياكل البيانات بطريقة عملية وتفاعلية. حاول إكمال التمارين ومشاركة حلولك مع الآخرين!

الخلاصة

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

التعليقات

اترك تعليقاً