المصفوفات
المصفوفات عبارة عن مجموعة من العناصر المخزّنة في مواقع متجاورة في الذاكرة، والهدف من المصفوفات هو تخزين عناصر متعددة من النوع ذاته في مكان واحد، وبهذا يسهل حساب موقع كل عنصر في المصفوفة وذلك بإضافة قيمة إزاحة معينة إلى قيمة أساسية تمثّل موقع عنصر المصفوفة الأول في الذاكرة (عادة ما يرمز له بواسطة اسم المصفوفة).
ولتبسيط الصورة أكثر، يمكن تخيل المصفوفة على أنّها سلّم يقف واحد من أصدقائك على كل درجة من درجاته، وهكذا يمكنك معرفة موقع أيّ صديق بمعرفة رقم الدرجة التي يقف عليها.
ولكن يجب الانتباه إلى أنّ موقع الفهرس اللاحق يعتمد على نوع البيانات المستخدمة.
يمكن القول أنّ الصورة في أعلاه تمثّل نظرة علويّة للسلّم الذي تقف في بدايته، ويمكن التعرّف على كل عنصر بواسطة الفهرس الخاص به في المصفوفة (بنفس الطريقة التي يمكنك بواسطتها التعرّف على أصدقائك في المثال السابق).
أنواع الفهرسة في المصفوفات:
لفهرسة المصفوفات ثلاثة أنواع:
- (الفهرسة التي تبدأ من الصفر): يأخذ العنصر الأول في المصفوفة الرقم 0.
- (الفهرسة التي تبدأ من واحد): يأخذ العنصر الأول في المصفوفة الرقم 1.
- (الفهرسة التي تبدأ من n): يمكن اختيار العدد الذي سيأخذه العنصر الأول في المصفوفة. وعادة ما تسمح لغات البرمجة التي تعتمد هذا النوع من الفهرسة باستخدام الأرقام السالبة إضافة إلى أنواع البيانات العددية scalar مثل التعدادات enumerations أو المحارف characters.
فوائد استخدام المصفوفات
- تتيح المصفوفات الوصول إلى العناصر بطريقة عشوائية، وهذا يسرّع عملية الوصول إلى العناصر بالاعتماد على مواقعها.
- تتمتّع المصفوفات بمواقع تخزين مؤقتة cache locality أفضل وهو أمر قد يؤدي إلى إحداث فارق كبير في أداء المصفوفات.
تجدر الإشارة إلى أن السلسلة النصية string هي مصفوفة من المحارف.
عيوب المصفوفات
إن ما يعيب المصفوفات هو:
- أنّ حجم المصفوفات ثابت، وهذا يعني وجوب معرفة الحد الأقصى لعدد العناصر في المصفوفة قبل تعريفها، إلى جانب أنّ الذاكرة المحجوزة للمصفوفة تكون مساوية للحد الأقصى بصرف النظر عن عدد عناصر المصفوفة الحقيقي، وعادة ما لا يتم الوصول إلى الحد الأقصى عمليًا.
- أن عملية إضافة عنصر جديد إلى المصفوفة مكلفة من ناحية الوقت وذلك لأن هذه العملية تتطلب إيجاد مكان للعنصر الجديد، وهذا بدوره يتطلب إزاحة العناصر عن مواقعها الأصلية.
أمثلة
تعرض الأمثلة التالية طريقة تعريف المصفوفات في عدد من لغات البرمجة:
- C/C++/Java
// C/C++/Java مصفوفة محارف في
char arr1[] = {'g', 'e', 'e', 'k', 's'};
// C/C++/Java مصفوفة أعداد صحيحة في
int arr2[] = {10, 20, 30, 40, 50};
يمكن الوصول إلى العنصر عن طريق موقعه وذلك باستخدام التعبير arr[i]
فمثلًا نحصل على الحرف 'g'
من التعبير arr1[0]
ونحصل على العدد 20
من التعبير arr2[1]
.
يمكن استخدام القوائم في بايثون لجمع مجموعة من العناصر في مكان واحد، ويمكن للقوائم في بايثون أن تضمّ أنواعًا مختلفة من البيانات:
squares = [1, 4, 9, 16, 25]
كذلك تقدّم بايثون الوحدة array التي تتيح استخدام المصفوفات، وتختلف هذه المصفوفات عن القوائم في أن أنواع الكائنات التي يمكن تخزينها في المصفوفات محدودة.
from array import *
array1 = array('i', [10,20,30,40,50])
يجدر التنبيه هنا إلى أن مصفوفة المحارف تسمى بالسلسلة النصية string عادةً.
المصدر
- صفحة Introduction to Arrays في توثيق بنى المعطيات في موقع GeeksforGeeks.