حذف عقدة من قائمة مترابطة - كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 - المملكة العربية السعودية

الكتاب: كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 | المادة: الذكاء الإصطناعي | المرحلة: الصف 12 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

الدرس: حذف عقدة من قائمة مترابطة

📚 معلومات الصفحة

الكتاب: كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 | المادة: الذكاء الإصطناعي | المرحلة: الصف 12 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

نوع المحتوى: درس تعليمي

مستوى الصعوبة: مبتدئ

📝 ملخص الصفحة

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

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

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

📄 النص الكامل للصفحة

# single node class Node: def __init__(self, data = None, next = None): self.data = data self.next = next# linked list with one head node class LinkedList: def __init__(self): self.head = None def deleteNode(key, follow):# store the head node temp = follow.head# find the key to be deleted, # the trace of the previous node to be changed while(temp is not None): if temp.data == key: break prev = temp temp = temp.next# unlink the node from the linked list prev.next = temp.next temp = None--- SECTION: 1. اربط مؤشر العقدة 12 بالعقدة 99. --- 1. اربط مؤشر العقدة 12 بالعقدة 99.--- SECTION: 2. احذف العقدة 37. --- 2. احذف العقدة 37.--- SECTION: 3. النتيجة النهائية --- 3. النتيجة النهائية# create the linked list L_list = LinkedList()# add the first three nodes L_list.head = Node(12) second = Node(37) third = Node(99) L_list.head.next = second second.next = third# delete node 37 deleteNode(37, L_list)إذا كنت تريد حذف العقدة الأولى من القائمة المترابطة، عليك نقل مؤشر الرأس إلى العقدة الثانية من القائمة.# print the linked list node = L_list.head while node: print (node.data) node = node.next2023 - 1447--- VISUAL CONTEXT --- **DIAGRAM**: Untitled Description: A diagram showing an initial linked list of three nodes. The first node contains the value 12 and is labeled 'node'. It points to the second node, which contains 37 and is labeled 'node.next'. The second node points to the third node, which contains 99 and is labeled 'node.next.next'. Arrows indicate the 'next' pointers. Key Values: Node 1: 12, Node 2: 37, Node 3: 99 Context: This diagram illustrates the initial state of the linked list before any deletion operation, corresponding to the list creation in the Python code.**DIAGRAM**: Untitled Description: A diagram illustrating the process of deleting node 37. The first node (12, labeled 'node') now points directly to the third node (99, labeled 'node.next'), bypassing the second node. This new link is indicated by a dashed arrow labeled '1'. The second node (37, labeled 'node.next') is shown separately below, crossed out with a diagonal line, and labeled '2', indicating its removal from the list. Key Values: Node 1: 12, Node 2: 37 (deleted), Node 3: 99 Context: This diagram visually explains the two steps of deleting a node: first, updating the pointer of the preceding node to skip the node to be deleted, and second, conceptually removing the node from memory. This corresponds to instructions 1 and 2.**DIAGRAM**: النتيجة النهائية Description: A diagram showing the final state of the linked list after node 37 has been deleted. The list now consists of two nodes: the first node contains 12 and is labeled 'node', and it points to the second node, which contains 99 and is labeled 'node.next'. The arrow connecting them is labeled '3'. Key Values: Node 1: 12, Node 2: 99 Context: This diagram represents the linked list after the deletion operation is complete, showing the resulting structure. This matches the output of the Python code.

🎴 بطاقات تعليمية للمراجعة

عدد البطاقات: 5 بطاقة لهذه الصفحة

ما هي العقدة (Node) في سياق القوائم المترابطة؟

الإجابة: العقدة هي الوحدة الأساسية في القائمة المترابطة، وتحتوي على جزأين: البيانات (data) ومؤشر (next) يشير إلى العقدة التالية في السلسلة.

الشرح: تم تعريف العقدة ككيان يحتوي على المعلومات (data) ورابط للعقدة التي تليها (next) في الكود المقدم.

تلميح: فكر في المكونات الأساسية التي تشكل بنية البيانات مثل القوائم المترابطة.

ما هي وظيفة الدالة `__init__` في كلاس `Node`؟

الإجابة: تقوم الدالة `__init__` بتهيئة كائن العقدة (Node) عند إنشائه، وتعيين قيم افتراضية (None) للبيانات والمؤشر إذا لم يتم تمرير قيم محددة.

الشرح: الدالة `__init__` هي الدالة البانية (constructor) في بايثون، وهي المسؤولة عن إعداد الحالة الأولية للكائن.

تلميح: ماذا يحدث عندما تنشئ كائناً جديداً باستخدام `Node()`؟

ما هي وظيفة الدالة `__init__` في كلاس `LinkedList`؟

الإجابة: تقوم الدالة `__init__` بتهيئة كائن القائمة المترابطة (LinkedList) عن طريق تعيين قيمة `None` للمؤشر `head`، مما يعني أن القائمة فارغة عند إنشائها.

الشرح: المؤشر `head` هو نقطة البداية للقائمة المترابطة، وبدءه بقيمة `None` يشير إلى أن القائمة فارغة.

تلميح: ما هو العنصر الأول الذي يحتاجه أي قائمة مترابطة لتبدأ؟

اشرح آلية عمل الدالة `deleteNode(key, follow)` لحذف عقدة من قائمة مترابطة.

الإجابة: تبدأ الدالة بتخزين مؤشر إلى رأس القائمة (`follow.head`). ثم تقوم بالمرور على العقد في القائمة لتحديد موقع العقدة التي تحمل القيمة (`key`). في نفس الوقت، تحتفظ الدالة بمؤشر إلى العقدة السابقة (`prev`). عند العثور على العقدة المراد حذفها، يتم تعديل مؤشر العقدة السابقة (`prev.next`) ليشير إلى العقدة التالية للعقدة المحذوفة (`temp.next`)، ثم يتم تعيين العقدة المحذوفة إلى `None` لتحريرها.

الشرح: تتطلب إزالة عقدة من قائمة مترابطة تعديل المؤشر للعقدة التي تسبقها لتجاوز العقدة المحذوفة، مما يحافظ على تسلسل القائمة.

تلميح: كيف يتم التأكد من أن القائمة تظل متصلة بعد إزالة عقدة؟

في سياق حذف عقدة ليست الرأس من قائمة مترابطة، ما أهمية الاحتفاظ بمؤشر للعقدة السابقة (previous node)؟

الإجابة: يُعد الاحتفاظ بمؤشر للعقدة السابقة أمراً حاسماً لربطها بالعقدة التالية للعقدة المراد حذفها. بدون هذا المؤشر، لن نتمكن من تعديل الرابط (next pointer) للعقدة السابقة، مما يؤدي إلى كسر تسلسل القائمة.

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

تلميح: ماذا سيحدث إذا حاولت إزالة شيء دون معرفة ما يأتي قبله؟