مرحبا لغة البرمجة: قائمة مرتبطة

نستمر في بناء لغة مرحبا . نعتبر اليوم التنفيذ المدمج لقائمة مرتبطة (قائمة مرتبطة).



قائمة مرتبطة>
— , , , , ( ) , , .



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



أولاً ، لنقم بإنشاء مثيل لقائمتنا التجريبية:



VAR list = <"I", "will", "be">


في المثال أعلاه ، يتم إنشاء روابط ثنائية الاتجاه تلقائيًا لثلاث عقد.



تحتوي القائمة المرتبطة غير الفارغة في Hi دائمًا على عقدة واحدة حالية أو "نشطة". بشكل افتراضي ، هذا هو آخر عنصر مضاف ، وهو الآن "يكون". دعنا نتحقق من هذا:



PRINT list.current  #  "be"


دعنا نضيف عنصرين آخرين إلى قائمتنا:



list.insert "back", "!"  #  list  : "I", "will", "be", "back", "!"


تضيف طريقة الإدراج المضمنة عناصر جديدة مباشرة بعد العقدة النشطة ، وتقوم تلقائيًا ببناء روابط جديدة وتجعل آخر عنصر مضاف حاليًا (يمكنك إضافة أول عقدة قائمة جديدة وجعلها باستخدام طريقة insertFirst).



تتم الإزالة بطريقة مماثلة للعنصر الحالي :



list.remove 1  # list  : "I", "will", "be", "back"


ومع ذلك ، يمكنك حذف عدة عناصر في وقت واحد ، لذلك يجب عليك أولاً ضبط المؤشر على العقدة الأولى المراد حذفها :



VAR secList = list
secList.prev 2
secList.remove 2  # secList   : "I", "back"


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



يمكنك استبدال العقدة الحالية بأخرى ببساطة عن طريق تعيين قيمة جديدة للعنصر:



secList.urrent = "smile"  # secList  : "smile ", "back"


يمكنك حذف جميع العقد ، أي يمكنك جعل القائمة فارغة كما يلي:



secList = <>


من الملائم الانتقال إلى العقد الأولى والأخيرة على النحو التالي:



list.first
LET last = list.last  #        


وبالتالي ، يمكنك بسهولة إجراء عمليات مختلفة باستخدام القائمة:



PRINT list #  "I", "will", "be", "back"
list.first
list.next
list.insert "not"
LET be = list



All Articles