الفرق بين المصفوفة والقائمة المرتبطة

مؤلف: Laura McKinney
تاريخ الخلق: 3 أبريل 2021
تاريخ التحديث: 7 قد 2024
Anonim
Array vs Linked List | Difference Between Arrays And Linked List | Data Structures | Simplilearn
فيديو: Array vs Linked List | Difference Between Arrays And Linked List | Data Structures | Simplilearn

المحتوى


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

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

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

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


  1. رسم بياني للمقارنة
  2. فريف
  3. الاختلافات الرئيسية
  4. استنتاج

رسم بياني للمقارنة

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


تعريف صفيف

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

دعونا نلقي نظرة على بعض المفاهيم التي يجب تذكرها حول المصفوفات:

  • يمكن الوصول إلى العناصر الفردية للصفيف عن طريق وصف اسم المصفوفة ، متبوعًا بالفهرس أو منخفض (تحديد موقع العنصر في المصفوفة) داخل الأقواس المربعة. على سبيل المثال ، لاسترداد العنصر الخامس من الصفيف ، نحتاج إلى كتابة بيان
  • في أي حال ، سيتم تخزين عناصر الصفيف في موقع ذاكرة متتالي.
  • يحتوي العنصر الأول للصفيف على مؤشر الصفر. هذا يعني أنه سيتم تحديد العنصر الأول والأخير كـ ، وعلى التوالي.
  • يتم إعطاء عدد العناصر التي يمكن تخزينها في صفيف ، أي حجم الصفيف أو طوله بواسطة المعادلة التالية:
    (الحد الأعلى ملزمة الحد) + 1
    للصفيف أعلاه ، سيكون (9-0) + 1 = 10. حيث 0 هو الحد الأدنى للصفيف ، و 9 هو الحد الأعلى للصفيف.
  • يمكن قراءة المصفوفات أو كتابتها من خلال الحلقة. إذا قرأنا المصفوفة أحادية البعد ، فهذا يتطلب حلقة واحدة للقراءة وغيرها للكتابة (المصفوفة) ، على سبيل المثال:
    ا. لقراءة مجموعة
    لـ (i = 0 ؛ i <= 9 ؛ i ++)
    {scanf ("٪ d"، & a)؛ }
    ب. لكتابة مجموعة
    لـ (i = 0 ؛ i <= 9 ؛ i ++)
    {f ("٪ d"، a)؛ }
  • في حالة المصفوفة ثنائية الأبعاد ، سيتطلب الأمر حلقتين وستحتاج المصفوفة ذات الأبعاد n إلى حلقات n.

العمليات التي تتم على المصفوفات هي:

  1. إنشاء مجموعة
  2. اجتياز مجموعة
  3. إدراج عناصر جديدة
  4. حذف العناصر المطلوبة.
  5. تعديل عنصر.
  6. دمج المصفوفات

مثال

يوضح البرنامج التالي قراءة وكتابة الصفيف.

#تضمن
#تضمن
الفراغ الرئيسي ()
{
كثافة العمليات
f ("أدخل الصفيف") ؛
لـ (i = 0 ؛ i <= 9 ؛ i ++)
{
scanf ("٪ d"، & a)؛
}
f ("أدخل الصفيف") ؛
لـ (i = 0 ؛ i <= 9 ؛ i ++)
{
f ("٪ d n" ، أ) ؛
}
getch () ؛
}

تعريف القائمة المرتبطة

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

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

أنواع القوائم المرتبطة هي قائمة مرتبطة منفردة ، قائمة مرتبطة مزدوجة ، قائمة مرتبطة دائرية ، قائمة دائرية مزدوجة.

العمليات المنفذة في القائمة المرتبطة هي:

  1. خلق
  2. العبور
  3. إدراج
  4. حذف
  5. البحث
  6. سلسلة
  7. عرض

مثال

يوضح المقتطف التالي إنشاء قائمة مرتبطة:

هيكل العقدة
{
عدد الأسطوانات
stract العقدة * التالي ؛
}
start = NULL؛
إنشاء باطل ()
{
typedef عقدة بنية NODE؛
NODE * p، * q؛
اختيار شار
أولاً = NULL ؛
فعل
{
ع = (NODE *) malloc (sizeof (NODE)) ؛
f ("أدخل عنصر البيانات n") ؛
scanf ("٪ d"، & p -> num)؛
إذا (p == NULL)
{
ف = البداية ؛
بينما (ف -> التالي! = NULL)
{ف = ف -> التالي
}
p -> next = q -> next ؛
ف -> = ع ؛
}
آخر
{
ع -> التالي = البداية ؛
البدء = ع ؛
}
f ("هل تريد المتابعة (اكتب y أو n)؟ n") ؛
scanf ("٪ c" ، والاختيار) ؛
}
بينما ((اختيار == ​​y) || (اختيار == ​​Y)) ؛
}

  1. الصفيف هو أن بنية البيانات تحتوي على مجموعة من عناصر البيانات المشابهة ، في حين أن القائمة المرتبطة تعتبر بنية بيانات غير بدائية تحتوي على مجموعة من العناصر المرتبطة غير المرتبة المعروفة باسم العقد.
  2. في الصفيف ، تنتمي العناصر إلى الفهارس ، أي إذا كنت تريد الدخول إلى العنصر الرابع ، يجب عليك كتابة اسم المتغير مع الفهرس أو الموقع داخل القوس المربّع.
    في قائمة مرتبطة ، على الرغم من ذلك ، يجب أن تبدأ من الرأس وأن تبدأ في طريقك حتى تصل إلى العنصر الرابع.
  3. أثناء الوصول إلى صفيف عناصر بسرعة بينما تستغرق القائمة المرتبطة وقتًا خطيًا ، إلا أنها أبطأ قليلاً.
  4. عمليات مثل الإدراج والحذف في المصفوفات تستهلك الكثير من الوقت. من ناحية أخرى ، فإن أداء هذه العمليات في القوائم المرتبطة سريع.
  5. المصفوفات ذات حجم ثابت. في المقابل ، فإن القوائم المرتبطة ديناميكية ومرنة ويمكنها توسيع حجمها وتقليصه.
  6. في صفيف ، يتم تخصيص الذاكرة أثناء وقت الترجمة بينما في القائمة المرتبطة يتم تخصيصها أثناء التنفيذ أو وقت التشغيل.
  7. يتم تخزين العناصر على التوالي في المصفوفات بينما يتم تخزينها بشكل عشوائي في القوائم المرتبطة.
  8. متطلبات الذاكرة أقل بسبب تخزين البيانات الفعلية داخل الفهرس في الصفيف. على عكس ذلك ، هناك حاجة لمزيد من الذاكرة في القوائم المرتبطة بسبب تخزين عناصر المراجع التالية والسابقة الإضافية.
  9. بالإضافة إلى ذلك ، فإن استخدام الذاكرة غير فعال في الصفيف. على العكس ، فإن استخدام الذاكرة فعال في الصفيف.

استنتاج

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