القائمة المرتبطة بشكل مضاعف هي بنية بيانات يحتوي فيها كل عنصر على مؤشرين: أحدهما إلى العنصر السابق والآخر إلى العنصر التالي. على عكس القائمة المرتبطة العادية ، تتيح لك القائمة المرتبطة بشكل مضاعف الوصول بسرعة إلى كل من العنصر السابق والعنصر التالي. يمكن أن يكون إنشاء قائمة والعمل معها مفيدا في العديد من الخوارزميات وفي حل مشكلات البرمجة.
في هذه المقالة ، سننظر في كيفية إنشاء واستخدام قائمة مرتبطة بشكل مضاعف في لغة برمجة بايثون. سنقدم بعض أمثلة التعليمات البرمجية لإظهار كيفية إضافة عناصر القائمة وإزالتها وتعديلها ، بالإضافة إلى كيفية اجتياز القائمة في كلا الاتجاهين.
طريقة واحدة لتنفيذ قائمة مرتبطة بشكل مضاعف في بيثون هو استخدام الطبقات. سيتم تمثيل كل عنصر من عناصر القائمة بواسطة كائن من هذه الفئة يحتوي على قيم العناصر والمراجع إلى العناصر السابقة والتالية. يتيح لك هذا التطبيق إدارة القائمة بسهولة ومرونة وإضافة العناصر وإزالتها ، بالإضافة إلى إجراء عمليات أخرى.
في ما يلي ، سنلقي نظرة على أمثلة التعليمات البرمجية التي ستساعدك على فهم أفضل لكيفية إنشاء واستخدام قائمة مرتبطة بشكل مضاعف في بايثون. سوف تتعلم كيفية إنشاء قائمة ، إضافة وإزالة العناصر ، ويتجول في القائمة في كلا الاتجاهين. إن معرفة كيفية العمل مع القوائم المرتبطة بشكل مضاعف ستفتح لك فرصا جديدة في البرمجة وحل المهام المختلفة.
- ما هي قائمة مرتبطة بشكل مضاعف?
- مزايا استخدام قائمة مرتبطة بشكل مضاعف
- كيفية إنشاء قائمة مرتبطة بشكل مضاعف في بايثون
- تهيئة قائمة مرتبطة بشكل مضاعف
- إضافة عناصر إلى قائمة مرتبطة بشكل مضاعف
- أمثلة على استخدام قائمة مرتبطة بشكل مضاعف في بايثون
- سؤال وجواب
- ما هي قائمة مرتبطة بشكل مضاعف?
- كيف يمكنني إنشاء قائمة فارغة مرتبطة مضاعفة في بيثون?
- كيف يمكنني إضافة عنصر إلى أعلى قائمة مرتبطة بشكل مضاعف?
- كيف يمكنني إزالة عنصر من قائمة مرتبطة بشكل مضاعف?
- كيف يمكنني فرز وعرض جميع عناصر قائمة مرتبطة بشكل مضاعف?
ما هي قائمة مرتبطة بشكل مضاعف?
القائمة المرتبطة بشكل مضاعف هي بنية بيانات تتكون من عقد ، يحتوي كل منها على روابط إلى العناصر السابقة والتالية في القائمة. وبالتالي ، فإن كل عنصر في القائمة له علاقتان: واحدة مع العنصر السابق والأخرى مع العنصر التالي.
الميزة الرئيسية للقائمة المرتبطة بشكل مضاعف هي القدرة على إدراج العناصر وحذفها بكفاءة في أي مكان في القائمة. يتم تحقيق ذلك من خلال وجود روابط للعناصر السابقة والتالية. على عكس القائمة المرتبطة منفردة ، لإجراء هذه العمليات في قائمة مرتبطة بشكل مضاعف ، لا تحتاج إلى تصفح القائمة بأكملها من البداية إلى النهاية.
تحتوي كل عقدة في قائمة مرتبطة بشكل مضاعف على مؤشرين ، يمكن أن يكونا إما فارغين إذا كان العنصر هو الأول أو الأخير في القائمة ، أو يشير إلى العناصر السابقة والتالية. يحتوي العنصر الأول من القائمة على مرجع إلى العنصر الفارغ السابق ، والعنصر الأخير له مرجع إلى العنصر الفارغ التالي.
مثال على قائمة مرتبطة بشكل مضاعف:
| العقدة 1 | العقدة 2 | العقدة 3 | العقدة 4 |
| القيمة: 10 | القيمة: 20 | القيمة: 30 | القيمة: 40 |
| السابق: لاغية | السابق: العقدة 1 | السابق: عقدة 2 | السابق: العقدة 3 |
| التالي: العقدة 2 | التالي: العقدة 3 | التالي: العقدة 4 | التالي: لاغية |
في هذا المثال ، تحتوي العقد على القيم 10 و 20 و 30 و 40. تحتوي العقدة الأولى على مرجع للعنصر السابق يساوي قيمة فارغة ، والإشارة إلى العنصر التالي تساوي العقدة 2. في العقدة الأخيرة ، يكون المرجع إلى العنصر السابق مساويا للعقدة 3 ، ويكون المرجع إلى العنصر التالي فارغا.
غالبا ما يتم استخدام قائمة مرتبطة بشكل مضاعف في المواقف التي تحتاج فيها إلى إجراء عمليات لإدراج العناصر وحذفها في منتصف القائمة. ومع ذلك ، فإنه يتطلب ذاكرة أكثر من قائمة مرتبطة منفردة ، بسبب وجود مؤشرين لكل عقدة.
مزايا استخدام قائمة مرتبطة بشكل مضاعف
القائمة المرتبطة بشكل مضاعف هي إحدى هياكل البيانات ، وهي سلسلة من العناصر المتعلقة ببعضها البعض. يحتوي كل عنصر من عناصر القائمة المرتبطة بشكل مضاعف على روابط إلى العناصر السابقة والتالية ، مما يجعل من الممكن التحرك للأمام والخلف عبر القائمة.
استخدام قائمة مرتبطة بشكل مضاعف له العديد من المزايا:
- إدراج العناصر وحذفها: تحتوي القائمة المرتبطة بشكل مضاعف على ميزات فعالة لإدراج العناصر وحذفها. على عكس المصفوفة ، حيث قد يتطلب إدراج عنصر أو حذفه إعادة ترتيب جميع العناصر اللاحقة ، في قائمة مرتبطة بشكل مضاعف ، يكفي تغيير المراجع إلى العناصر المجاورة. هذا يجعل عمليات الإدراج والحذف أسرع وأكثر كفاءة.
- الوصول إلى العناصر: في قائمة مرتبطة بشكل مضاعف ، يمكن الوصول إلى العناصر إما عن طريق الفهرس أو عن طريق التنقل العكسي من النهاية إلى أعلى القائمة. هذا يجعل من السهل اجتياز القائمة في كلا الاتجاهين والبحث عن العناصر.
- الذاكرة: تسمح القائمة المرتبطة بشكل مضاعف بالاستخدام الفعال للذاكرة. يحتوي كل عنصر في القائمة على روابط إلى العناصر السابقة والتالية ، مما يحفظ الذاكرة عند تخزين البيانات.
وبالتالي ، يعد استخدام قائمة مرتبطة بشكل مضاعف خيارا معقولا في المواقف التي يتطلب فيها إدخال العناصر وحذفها بشكل متكرر ، وكذلك عندما يكون من الضروري الوصول إلى عناصر القائمة بشكل فعال.
كيفية إنشاء قائمة مرتبطة بشكل مضاعف في بايثون
القائمة المرتبطة بشكل مضاعف هي بنية بيانات تتكون من عقد ، يحتوي كل منها على رابط للعقد السابقة والتالية. تتيح لك بنية البيانات هذه إدراج عناصر القائمة وحذفها والوصول إليها بكفاءة.
في بايثون ، يمكنك إنشاء قائمة مرتبطة بشكل مضاعف عن طريق تحديد فئة لعقدة القائمة وفئة للقائمة نفسها.
فيما يلي مثال على التعليمات البرمجية التي توضح كيفية إنشاء قائمة مرتبطة بشكل مضاعف في بايثون:
عقدة فئة:
مواطنه _ _ الحرف الأول__(النفس, البيانات):
النفس.البيانات = البيانات
النفس.السابق = لا شيء
النفس.التالي = لا شيء
فئة مزدوجة:
مواطنه _ _ الحرف الأول__(النفس):
النفس.الرأس = لا شيء
ديف إلحاق (النفس والبيانات):
العقدة الجديدة = العقدة (البيانات)
إذا النفس.الرأس لا شيء:
النفس.الرأس = عقدة جديدة
آخر:
العقد الحالي = الذات.رئيس
while current_node.next:
current_node = current_node.next
current_node.next = new_node
new_node.prev = current_node
def display(self):
current_node = self.head
while current_node:
print(current_node.data)
current_node = current_node.next
Чтобы создать новый узел, используйте класс Node. Узел содержит данные и ссылки на предыдущий и следующий узлы.
Класс DoublyLinkedList представляет сам двусвязный список. لديها خاصية الرأس ، وهو إشارة إلى العقدة الأولى من القائمة.
تسمح لك طريقة الإلحاق بإضافة عقدة جديدة إلى نهاية القائمة. إذا كانت القائمة فارغة ، تصبح العقدة الجديدة العنصر الأول. خلاف ذلك ، يتم فرز عقد القائمة إلى العقدة الأخيرة ، وبعد ذلك يتم إضافة عقدة جديدة بعدها.
تسمح لك طريقة العرض بعرض عناصر القائمة في وحدة التحكم.
هنا مثال على الاستخدام:
لينكد_ليست = دوبليلينكدليست()
لينكد_ليست.إلحاق (1)
لينكد_ليست.إلحاق(2)
لينكد_ليست.إلحاق (3)
لينكد_ليست.عرض()
ستكون نتيجة تنفيذ التعليمات البرمجية:
- 1
- 2
- 3
وبالتالي ، تم إنشاء القائمة المرتبطة بشكل مضاعف بنجاح ومليئة بالعناصر.
تهيئة قائمة مرتبطة بشكل مضاعف
القائمة المرتبطة بشكل مضاعف هي بنية بيانات تتكون من عقد ، يحتوي كل منها على رابطين: أحدهما إلى العقدة السابقة والآخر إلى العقدة التالية. تتيح لك هذه القائمة إجراء عمليات لإدراج العناصر وحذفها والبحث عنها بكفاءة.
لتهيئة قائمة مرتبطة بشكل مضاعف في بايثون ، تحتاج إلى إنشاء فئة تمثل عقدة القائمة. ستحتوي كل عقدة على قيمة وروابط للعقد التالية والسابقة.
:
عقدة فئة:
مواطنه _ _ الحرف الأول__(النفس, البيانات):
النفس.البيانات = البيانات
النفس.السابق = لا شيء
النفس.التالي = لا شيء
إذا كانت العقدة هي الأولى أو الأخيرة في القائمة.
يوجد أدناه مثال على رمز لإنشاء قائمة مرتبطة بشكل مضاعف:
ديف إينيت_دليست():
# Создаем узлы списка
node1 = Node(1)
node2 = Node(2)
node3 = Node(3)
# Устанавливаем ссылки на предыдущий и следующий узел
node1.prev = None
node1.next = node2
node2.prev = node1
node2.next = node3
node3.prev = node2
node3.next = None
# Возвращаем первый узел списка
return node1
في هذا المثال ، نقوم بإنشاء ثلاث عقد ، وتعيين روابط إلى العقدة السابقة والتالية لكل عقدة ، وإرجاع العقدة الأولى من القائمة.
الآن يمكننا استخدام هذه الوظيفة لتهيئة قائمة مرتبطة بشكل مضاعف.:
دليست = إينيت_دليست()ستحتوي القائمة المرتبطة المزدوجة الناتجة على القيم 1 و 2 و 3 ، وسيتم ربط العقد بالترتيب الصحيح.
إضافة عناصر إلى قائمة مرتبطة بشكل مضاعف
القائمة المرتبطة بشكل مضاعف هي بنية بيانات يحتوي فيها كل عنصر على مرجع للعنصرين السابق والتالي. تتم إضافة عناصر جديدة إلى هذه القائمة عن طريق تغيير الروابط. في ما يلي مثال على كود بايثون الذي يوضح إضافة عنصر إلى قائمة مرتبطة بشكل مضاعف:
عقدة فئة:
مواطنه _ _ الحرف الأول__(النفس, البيانات):
النفس.البيانات = البيانات
النفس.السابق = لا شيء
النفس.التالي = لا شيء
فئة مزدوجة:
مواطنه _ _ الحرف الأول__(النفس):
النفس.الرأس = لا شيء
ديف أد نود (النفس ، البيانات):
العقدة الجديدة = العقدة (البيانات)
إذا النفس.الرأس لا شيء:
النفس.الرأس = عقدة جديدة
آخر:
الحالي = الذات.رئيس
في حين الحالي.التالي:
الحالي = الحالي.التالي
الحالي.التالي = عقدة جديدة
عقدة جديدة.السابق = الحالي
قائمة = قائمة مزدوجة()
قائمة.إضافة عقدة (1)
قائمة.إضافة عقدة (2)
قائمة.إضافة عقدة (3)
في هذا المثال ، يتم إنشاء فئة عقدة تمثل عنصرا من قائمة مرتبطة بشكل مضاعف. أنه يحتوي على خاصية تخزين البيانات واثنين من المراجع: السابق إلى العنصر السابق وبجوار العنصر التالي. بعد ذلك ، يتم إنشاء فئة دوبليلينكدليست ، الذي يحتوي على إشارة إلى رأس القائمة (الرأس) وطريقة إضافة عقدة لإضافة عنصر جديد.
تتحقق طريقة إضافة العقد مما إذا كان رأس القائمة فارغا. إذا كان الأمر كذلك ، يصبح العنصر الجديد رأس القائمة. إذا لم يكن الأمر كذلك ، فإننا نمر بالقائمة ، بدءا من الرأس ، حتى نصل إلى العنصر الأخير (الحالي.التالي هو لا شيء). بعد ذلك ، وضعنا التيار.الرابط التالي للعنصر الجديد والعقدة الجديدة.رابط السابق إلى العنصر الحالي ، وبالتالي إضافة عنصر جديد إلى نهاية القائمة.
نتيجة لذلك ، إذا قمت بتنفيذ هذا الرمز ، فستتم إضافة العناصر 1 و 2 و 3 إلى القائمة المرتبطة بشكل مضاعف.
أمثلة على استخدام قائمة مرتبطة بشكل مضاعف في بايثون
القائمة المرتبطة بشكل مضاعف هي بنية بيانات تتكون من عقد ، حيث تحتوي كل عقدة على رابط للعقد السابقة والتالية. توفر بنية البيانات هذه المرونة والكفاءة لإضافة العناصر وحذفها والوصول إليها.
فيما يلي بعض الأمثلة على استخدام قائمة مرتبطة بشكل مضاعف في بايثون:
النفس.الرأس = التيار.التالي
إذا الحالي.التالي:
الحالي.التالي.السابق = الحالي.السابق
استراحة