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