موصى به, 2024

اختيار المحرر

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

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

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

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

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

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

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

تعريف المصفوفة

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

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

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

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

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

مثال

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

#include
#include
void main ()
{
int a[10], i;
printf("Enter the array");
for ( i= 0; i <= 9; i++)
{
scanf ( "%d", &a[ i ] ) ;
}
printf( "Enter the array" );
for (i = 0 ; i <= 9 ; i++)
{
printf ( "%d\n", a[ i ] ) ;
}
getch ();
}

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

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

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

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

العمليات التي يتم إجراؤها على "قائمة مرتبطة" هي:

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

مثال

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

struct node
{
int num;
stuct node *next;
}
start = NULL;
void create()
{
typedef struct node NODE;
NODE *p, *q;
char choice;
first = NULL;
do
{
p = (NODE *) malloc (sizeof (NODE));
printf ("Enter the data item\n");
scanf ("%d", & p -> num);
if (p == NULL)
{
q = start;
while (q -> next ! = NULL)
{ q = q -> next
}
p -> next = q -> next;
q -> = p;
}
else
{
p -> next = start;
start = p;
}
printf ("Do you want to continue (type y or n) ? \n");
scanf ("%c", &choice) ;
}
while ((choice == 'y') || (choice == 'Y'));
}

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

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

استنتاج

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

Top