122- كورس لغة بايثون Python شرح هياكل البيانات في بايثون – Python Data Structures – Linked Lists

Python Data Structures – Linked Lists

مقدمة عن القوائم المرتبطة في بايثون

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

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

إنشاء وتنفيذ القوائم المرتبطة في بايثون

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

هنا مثال بسيط يوضح كيفية إنشاء قائمة مرتبطة وإضافة عناصر إليها:

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            return
        last = self.head
        while last.next:
            last = last.next
        last.next = new_node

    def display(self):
        current = self.head
        while current:
            print(current.data, end=" -> ")
            current = current.next
        print("None")

# استخدام القائمة المرتبطة
linked_list = LinkedList()
linked_list.append(1)
linked_list.append(2)
linked_list.append(3)
linked_list.display()
    

في هذا المثال، قمنا بتعريف فئة Node لتمثيل العنصر، وفئة LinkedList لإدارة القائمة. يمكننا استخدام الدالة append لإضافة عناصر جديدة، والدالة display لعرض محتويات القائمة.

التعامل مع القوائم المرتبطة: إضافة وحذف العناصر

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

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

هنا مثال يوضح كيفية إضافة عنصر في بداية القائمة وحذف عنصر معين:

class LinkedList:
    # ... (نفس التعريفات السابقة)

    def prepend(self, data):
        new_node = Node(data)
        new_node.next = self.head
        self.head = new_node

    def delete(self, key):
        current = self.head
        if current and current.data == key:
            self.head = current.next
            current = None
            return

        prev = None
        while current and current.data != key:
            prev = current
            current = current.next

        if current is None:
            return

        prev.next = current.next
        current = None

# استخدام القائمة المرتبطة
linked_list.prepend(0)
linked_list.display()
linked_list.delete(2)
linked_list.display()
    

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