الانتقال إلى المحتوى الرئيسي

كيفية تغيير ترتيب العقد في قائمة مرتبطة منفردة

القائمة المرتبطة منفردة هي بنية بيانات خطية تتكون من عقد ، يحتوي كل منها على قيمة ورابط للعقدة التالية. من العمليات المهمة التي يمكن إجراؤها في قائمة مرتبطة منفردة تغيير ترتيب العقد.

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

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

يسمح لك استخدام خوارزمية عكس القائمة بتغيير ترتيب العقد بشكل فعال في قائمة مرتبطة منفردة دون الحاجة إلى إنشاء بنية جديدة أو نقل القيم.

  1. تحديد قائمة مرتبطة منفردة
  2. هيكل قائمة مرتبطة منفردة
  3. المشكلة مع ترتيب العقد
  4. ترتيب إضافة العقد إلى القائمة
  5. ترتيب البحث وحذف العقد
  6. تغيير ترتيب العقد
  7. أفكار لتغيير النظام
  8. تنفيذ تغيير النظام
  9. سؤال وجواب
  10. لماذا أحتاج إلى تغيير ترتيب العقد في قائمة مرتبطة منفردة?
  11. كيف يمكنني تغيير ترتيب العقد في قائمة مرتبطة منفردة?
  12. هل من الممكن مبادلة عقدتين متجاورتين في قائمة مرتبطة منفردة?
  13. كيف يمكنني تبديل عقدتين تعسفيتين في قائمة مرتبطة منفردة?
  14. كيف يمكنني تغيير ترتيب العقد في قائمة مرتبطة منفردة باستخدام خوارزمية "الوجه"?
  15. هل من الممكن إجراء عملية إعادة ترتيب العقد في قائمة مرتبطة منفردة في وقت ثابت?

تحديد قائمة مرتبطة منفردة

القائمة المرتبطة منفردة هي بنية بيانات تمثل سلسلة من العقد المشابهة لعناصر السلسلة. تحتوي كل عقدة على بيانات ورابط (رابط إلى العقدة التالية) يشير إلى العقدة التالية في القائمة.

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

تسمى العقدة الأولى من القائمة "رأس" أو "بداية" القائمة ، وتسمى العقدة الأخيرة "ذيل" أو "نهاية" القائمة. ترتبط العقد ببعضها البعض ، وتشكل تسلسلا متسلسلا.

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

هيكل قائمة مرتبطة منفردة

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

خارجيا ، القائمة عبارة عن سلسلة من العقد المرتبطة ، كل منها يحتوي على بيانات ومؤشر إلى العقدة التالية. علاوة على ذلك ، تشير العقدة الأخيرة من القائمة إلى فارغة أو لا تشير إلى شيء.

مثال على بنية قائمة مرتبطة منفردة:

العقدة 1البيانات:القيمة 1العقدة التالية:العقدة 2
العقدة 2البيانات:القيمة 2العقدة التالية:العقدة 3
العقدة 3البيانات:القيمة 3العقدة التالية:لاغية

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

للراحة ، يمكنك استخدام مؤشرين إضافيين: مؤشر إلى العقدة الحالية ومؤشر إلى العقدة السابقة. أيضا ، في بعض الأحيان عقدة يمكن تخزين مؤشر إلى العقدة السابقة من أجل أن تكون قادرة على التنقل مرة أخرى من خلال القائمة.

المشكلة مع ترتيب العقد

القائمة المرتبطة منفردة هي بنية بيانات تتكون من عقد ، يحتوي كل منها على عنصر بيانات ورابط للعقدة التالية. واحدة من المشاكل التي يمكن مواجهتها عند العمل مع القوائم المرتبطة منفردة هي تغيير ترتيب العقد.

لتغيير ترتيب العقد في قائمة مرتبطة منفردة ، تحتاج إلى القيام بالخطوات التالية:

  1. ابحث عن العقد التي تحتاج إلى تبديل.
  2. قم بتغيير روابط هذه العقد بحيث تشير إلى بعضها البعض وإلى العقدة التالية.
  3. قم بتغيير رابط العقدة السابقة بحيث يشير إلى العقدة الأولى بعد العقد المنقولة.

عند تنفيذ هذه الخطوات ، يجب أن تكون حريصا على عدم فقد الروابط إلى العقد الأخرى وعدم إنشاء حلقات لا نهاية لها في القائمة.

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

ترتيب إضافة العقد إلى القائمة

عند إنشاء قائمة مرتبطة منفردة ، يلعب الترتيب الذي تتم به إضافة العقد ووضعها دورا مهما. يمكن أن يؤدي تغيير ترتيب هذه العمليات إلى نتائج مختلفة ويؤثر على كفاءة العمل مع البيانات. لنلق نظرة على الطرق الرئيسية لإضافة العقد إلى القائمة:

  1. إضافة عقدة جديدة إلى أعلى القائمة:

    للقيام بذلك ، قم بإنشاء عقدة جديدة ، وقم بتعيين قيمة لها وحدد رابطا إلى العقدة التالية كعقدة أولى حالية. ثم أعد تعيين المؤشر إلى العقدة الأولى بحيث يشير إلى العقدة الجديدة.

  2. إضافة عقدة جديدة إلى نهاية القائمة:

    للقيام بذلك ، قم بإنشاء عقدة جديدة ، وقم بتعيين قيمة لها وحدد الارتباط إلى العقدة التالية كرابط فارغ أو فارغ. ثم ابحث عن العقدة الأخيرة في القائمة وأعد تعيين ارتباطها بالعقدة الجديدة.

  3. إضافة عقدة جديدة إلى منتصف القائمة:

    للقيام بذلك ، قم بإنشاء عقدة جديدة ، وقم بتعيين قيمة لها وابحث عن العقدة التي تحتاج بعدها إلى إدراج عقدة جديدة. ثم تحتاج إلى إعادة تعيين الارتباط إلى العقدة التالية من العقدة التي تم العثور عليها بحيث يشير إلى العقدة الجديدة ، وإعادة تعيين الارتباط إلى العقدة التالية للعقدة الجديدة إلى العقدة التي سبق أن ذهبت بعد العقدة التي تم العثور عليها.

يتيح لك اختيار الترتيب الصحيح لإضافة العقد إلى القائمة العمل مع البيانات بكفاءة وتبسيط معالجة العقدة.

ترتيب البحث وحذف العقد

في قائمة مرتبطة منفردة ، يمكن تنفيذ ترتيب البحث وحذف العقد بطرق مختلفة ، اعتمادا على المهمة المطروحة.

بحث العقدة

  1. نبدأ البحث من بداية القائمة وتعيين المؤشر إلى العقدة الأولى.
  2. نتحقق من قيمة العقدة لمطابقة القيمة المطلوبة.
  3. إذا تطابقت القيمة ، فسيتم العثور على العقدة ، ويمكننا إجراء العمليات اللازمة معها.
  4. إذا لم تتطابق القيمة ، فانتقل إلى العقدة التالية وتابع البحث.
  5. كرر الخطوات من 2 إلى 4 حتى يتم العثور على العقدة المطلوبة أو الوصول إلى نهاية القائمة (المؤشر في العقدة الأخيرة).
  6. إذا لم يتم العثور على العقدة ، فإننا نخرج الرسالة المقابلة.

حذف عقدة

  1. نبدأ في البحث عن العقدة التي يجب حذفها باستخدام ترتيب البحث الموضح أعلاه.
  2. عند العثور على العقدة المطلوبة ، يجب علينا تغيير مؤشر العقدة السابقة بحيث يشير إلى العقدة التالية المراد حذفها.
  3. تعيين مؤشر العقدة الحالية إلى العقدة التالية المراد حذفها.

عند حذف عقدة ، من المهم أن تضع في اعتبارك أنه بعد الحذف ، قد يتم فقد الرابط إلى العقدة التي يتم حذفها ، مما قد يؤدي إلى تسرب الذاكرة. لذلك ، قبل حذف العقدة ، نقوم بتحرير الذاكرة التي تشغلها.

تغيير ترتيب العقد

القائمة المرتبطة منفردة هي بنية بيانات تتكون من عقد ، يحتوي كل منها على قيمة ورابط للعقدة التالية. العقد مترابطة في اتجاه واحد ، وتشكل تسلسلا.

لتغيير ترتيب العقد في قائمة مرتبطة منفردة ، تحتاج إلى تغيير الروابط بين العقد بحيث تشير بترتيب عكسي.

يمكن تنفيذ خوارزمية تغيير ترتيب العقد في قائمة مرتبطة منفردة على النحو التالي:

  1. تهيئة ثلاثة متغيرات: بريفيوسنود ، كيرنتنود و نيكستنود.
  2. ابدأ من بداية القائمة عن طريق تعيين بريفيوسنود إلى نول و كيرنتنود إلى العقدة الأولى.
  3. حتى تصبح كيرنتنود فارغة ، قم بتنفيذ الإجراءات التالية:
  4. بعد الانتهاء من الحلقة ، سيتم عكس ترتيب العقدة في القائمة المعدلة إلى القائمة الأصلية.

على سبيل المثال ، إذا كانت قائمة المصدر تبدو كما يلي:

العقدةالمعنىالرابط
العقدة 1القيمة 1العقدة 2
العقدة 2القيمة 2العقدة 3
العقدة 3القيمة 3لاغية

بعد تطبيق الخوارزمية لتغيير ترتيب العقد ، ستأخذ القائمة النموذج التالي:

العقدةالمعنىالرابط
العقدة 1القيمة 1لاغية
العقدة 2القيمة 2العقدة 1
العقدة 3القيمة 3العقدة 2

وبالتالي ، يمكن تغيير ترتيب العقد في قائمة مرتبطة منفردة عن طريق تغيير الروابط بين العقد.

أفكار لتغيير النظام

1. باستخدام مؤشر إضافي إلى العقدة السابقة

عادة ما تحتوي القائمة المرتبطة منفردة على مؤشر إلى العقدة التالية فقط. ومع ذلك ، لتنفيذ عملية إعادة الترتيب ، يمكنك إضافة مؤشر إضافي إلى العقدة السابقة. سيسمح لك ذلك بالوصول بسرعة إلى العقدة السابقة وتغيير الروابط إلى العقد التالية ، مع الحفاظ على الروابط مع بقية عناصر القائمة.

2. باستخدام مؤشر إضافي إلى العقدة الأخيرة

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

3. استخدام مكدس أو قائمة انتظار لتخزين العقد مؤقتا

هناك طريقة أخرى لتغيير ترتيب العقد في قائمة مرتبطة منفردة وهي استخدام مكدس أو قائمة انتظار لتخزين العقد مؤقتا. أولا ، كرر من خلال جميع العقد باستخدام المؤشرات وإضافتها إلى المكدس أو قائمة الانتظار. ثم استخراج العقد في ترتيب عكسي وإنشاء قائمة جديدة باستخدام روابط إلى العقدة التالية.

4. باستخدام العودية

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

5. استخدام جدول لتصور أمر قابل للتغيير

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

تنفيذ تغيير النظام

هناك عدة طرق لتغيير ترتيب العناصر في قائمة مرتبطة منفردة:

  1. إعادة ترتيب العناصر: في هذه الطريقة ، من الضروري تبديل العناصر ، مع الحفاظ على اتصالاتها مع بعضها البعض. للقيام بذلك ، يمكنك استخدام المتغيرات المؤقتة أو ببساطة تبديل القيم في عقد القائمة.
  2. استخدام المؤشرات: تسمح لك بعض لغات البرمجة بإضافة مؤشرات إلى عناصر القائمة. بمساعدتهم ، يمكنك تغيير ترتيب العقد بسرعة دون التأثير على اتصالاتهم.
  3. إعادة إنشاء القائمة: هناك طريقة أخرى وهي إنشاء قائمة جديدة يتم فيها ترتيب العناصر بالترتيب الصحيح. للقيام بذلك ، يمكنك التكرار من خلال القائمة الأصلية وإضافة عناصرها إلى القائمة الجديدة بالترتيب المطلوب.

كل من هذه الأساليب لها مزاياها وعيوبها. يعتمد اختيار طريقة معينة على المهمة المحددة ولغة البرمجة المستخدمة.

سؤال وجواب

لماذا أحتاج إلى تغيير ترتيب العقد في قائمة مرتبطة منفردة?

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

كيف يمكنني تغيير ترتيب العقد في قائمة مرتبطة منفردة?

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

هل من الممكن مبادلة عقدتين متجاورتين في قائمة مرتبطة منفردة?

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

كيف يمكنني تبديل عقدتين تعسفيتين في قائمة مرتبطة منفردة?

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

كيفية تغيير ترتيب العقد في قائمة مرتبطة منفردة باستخدام خوارزمية "الوجه"?

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

هل من الممكن إجراء عملية تبديل العقدة في قائمة مرتبطة منفردة في وقت ثابت?

لا ، من المستحيل إجراء عملية إعادة ترتيب العقد في قائمة مرتبطة منفردة في وقت ثابت. لتغيير ترتيب العقد ، تحتاج إلى تغيير الروابط بين العقد ، الأمر الذي يتطلب المشي الخطي من خلال القائمة وتغيير الروابط لكل عقدة.