الفرق الأساسي إيه؟
الفكرة الأساسية
المصفوفة تخزن العناصر في أماكن متجاورة وتسمح بالوصول المباشر بالفهرس. القائمة المرتبطة تربط عقدًا ببعضها، ولذلك الوصول إلى مكان محدد يحتاج غالبًا إلى المرور على العقد.
المصفوفة العادية ذات طول ثابت. أما حاوية مثل vector فتضيف إمكانية تغيير الحجم، وقد تحتاج عند التوسع إلى مساحة جديدة ونقل العناصر. لا تخلط الحالتين في المقارنة.
احسب العملية كاملة
| العملية | المصفوفة | قائمة أحادية الربط |
|---|---|---|
| القراءة بالفهرس | وصول بزمن ثابت | مرور خطي غالبًا |
| البحث عن قيمة بلا فهرس مساعد | خطي عادة | خطي عادة |
| الإضافة في البداية | تحريك العناصر عادة | تعديل روابط مع معرفة الرأس |
| الإضافة بعد عقدة معروفة | تحريك في التمثيل المعتاد | تعديل روابط قد يكون بزمن ثابت |
كلمة «معروفة» مهمة. العثور على العقدة قد يحتاج زمنًا خطيًا، لذلك القول إن إضافة القائمة المرتبطة دائمًا ثابتة يهمل جزءًا من العمل.
مثال إضافة
القائمة الحالية 10 و20 و30، ونريد إضافة 15 بعد 10. في مصفوفة بها سعة كافية، يتحرك 20 و30 إلى اليمين ثم يوضع 15.
في القائمة المرتبطة، بعد الوصول لعقدة 10، نجعل الجديدة تشير إلى 20، ثم نجعل 10 تشير إلى الجديدة. النتيجة 10 و15 و20 و30.
لو الطلب هو «أضف بعد القيمة 10»، فاحسب تكلفة البحث أيضًا وحدد التصرف إذا لم توجد القيمة أو تكررت.
الذاكرة مهمة أيضًا
العقد تحتاج إلى مساحة للروابط، وقد تكون موزعة في الذاكرة. تجاور عناصر المصفوفة قد يفيد المرور المتتابع. لكن الأداء الفعلي يتأثر بحجم العنصر والحجز والجهاز وطبيعة الاستخدام.
لا تختار من رمز التعقيد وحده. قد تكون مصفوفة صغيرة أوضح وأنسب حتى لو بدت عملية معينة أسرع في بنية مرتبطة.
اختبر الحدود بالرسم
ارسم قائمة فارغة وأخرى بعقدة واحدة وثالثة بثلاث عقد. نفذ الإضافة في البداية وحذف أول عقدة، وراجع تغير الرأس وعدم فقد أي رابط.
وفي المصفوفة، ميّز عدد العناصر الحالي عن السعة المتاحة. وجود مكان محجوز لا يعني أنه عنصر فعلي في التسلسل.
اختار حسب الاستخدام
الوصول المتكرر حسب المكان يدفعك لدراسة بنية مفهرسة. والتعديلات المناسبة للروابط قد تدفعك لقائمة، بشرط حساب الوصول إلى المكان المطلوب.
تدرس هذه المقارنات في هياكل البيانات بعد C++ في مسار جمال تك. الإجابة القوية تشرح الافتراضات، ولا تعلن أن نوعًا واحدًا أسرع في كل الظروف.
مراجع وتفاصيل الكورسات
المراجع التالية تساعد على متابعة التعلم. الأمثلة والتمارين في هذا المقال تعليمية، وتفاصيل الكورسات تُراجع من الكتالوج.