مصفوفة (حوسبة)
المصفوفة هي تركيبة من البيانات يتم إنشائها بشكل برمجي في الحاسوب، يمكنها تخزين العديد من العناصر من نفس النوع و كل عنصر يحمل قيمة، يتم حجز مساحة من الذاكرة لتحمل قيمة و مكان كل عنصر بشكل متسلسل، المصفوفة لها سعة ثابتة [1] و لا تتغير خلال وقت التنفيذ لهذا يجب تحديد سعة المصفوفة خلال وقت البرمجة. المصفوفة يمكن أن تحتوي بيانات ببعد واحد أو أكثر . المصفوفة الثنائية البعد يمكن تصورها على أنها مصفوفات داخل اخرى . فالبعد الأول يمكن اعتباره المصفوفة الرئيسية أما البعد الثاني فهو مصفوفة داخل البعد الأول . كل عنصر من المصفوفة له حجم خاص به و حسب نوع المصفوفة، السعة الكلية للمصفوفة عبارة عن حجم العنصر مضروب في عدد العناصر .
الأداء والقيود
يتم تمثيل العناصر في الذاكرة في شكل مناطق متجاورة [2] ، هذا ما يجعل عمليات الإدراج والحذف مستحيلة، إلا إذا قمت بإنشاء مصفوفة جديد . فمن الضروري نسخ جميع العناصر من الجدول الأصلي إلى الجدول الجديد، ومن ثم تحرير مساحة الذاكرة المخصصة للمجموعة القديمة، أو يمكن استخدام المصفوفة الديناميكية. في بعض لغات البرمجة اسم المصفوفة هو مؤشر لأول عنصر في الفهرس .[3] توجد حالات قد تشكل مشكلة في النظام أو ثغرة أمنية أو خطأ في سير البرنامج [4] و هي الإشارة إلى عنصر خارج المجموعة . على سبيل المثال. إذا تم تصميم مصفوفة تحتوي على 50 عدد صحيح وقمت بكتابة قيمة إلى المؤشر أكبر من 50 ، فهذه القيمة ستكتب خارج ذاكرة المخصصة للمصفوفة، ولكن في بعض الأحيان نظام التشغيل يمنع هذا . سعة المصفوفة المحدود له ميزة ثبات زمن الوصول إلى قيمة العنصر، بغض النظر عن مكان العنصر المطلوب. ويرجع ذلك إلى أن العناصر هي مجموعة متجاورة في الذاكرة .
مؤشر الفهرسة
كل عنصر من المصفوفة يمثل متغير مستقل بذاته، فيمكن أن يخزن قيمة أو يسترجعها بواسطة استخدام المؤشر العددي (قيمة غير سالبة) المقابلة لموقع ذلك العنصر. قيمة المؤشر الأول في المصفوفة قد يكون صفرا أو واحد، وهذا حسب لغة البرمجة .
- الفهرسة من 0 : في هذا الوضع العنصر الأول من المصفوفة يتم الإشارة إليه بصفر ("0") . وفقا لذلك، فإن اي عنصر من المصفوفة يمكن الوصول إلى قيمته بإنقاص 1 من رقم ترتيبه. في لغة C هي مثال نموذجي يستخدم هذا الأسلوب من الفهرسة.[5]
- الفهرسة من 1 : الفهرسة على هذا النحو، العنصر الأول من المصفوفة يتم الإشارة إليه برقم "1" ، واي عنصر من المجموعة يمكن الإشارة إليه برقم ترتيبه.[6]
- الفهرسة المستندة ن (ن): هذا الوضع من الفهرسة يتنوع فيها المؤشر و قد يكون حرف أو رمز و هي تنستند إلى قيمة . كما يمكنها قبول قيمة سالبة .
الاستخدامات
تستخدم المصفوفات لتمثيل الهياكل المعقدة للبيانات مثل :
أو في الخوارزميات على سبيل المثال - خوارزمية بحث ثنائي .
أمثلة
الامثلة التالية بلغة البرمجة سي (c) .
مصفوفة ببعد واحد
int mydata[10]; // إنشاء مصفوفة بسعة 10 عناصر
mydata[0] = 22; // إسناد قيمة '22' لأول عنصر في المصفوفة
mydata[1] = 1;
mydata[2] = 11;
mydata[3] = 2;
mydata[9] = 33; // إسناد قيمة '33' لأخر عنصر في المصفوفة
مصفوفة ببعدين
int mydata[10] [10] // عشرة مصفوفات بسعة عشرة عناصر
mydata[0] [5] = 64; //إسناد قيمة للعنصر الخامس في المصفوفة الأولى
إسناد قيمة للعناصر في وقت الإنشاء
int mydata[5] = {6, 3335, 42, 85, 50};
مراجع
- - Bothell Computing & Software Systems- University of Washington، اطلع عليه بتاريخ 15-08-2014 نسخة محفوظة 01 أغسطس 2017 على موقع واي باك مشين.
- - الحوسبة المتوازية EECS COLLEGE OF ENGINEERING UC Berkeley، اطلع عليه بتاريخ 15-08-2014 نسخة محفوظة 23 سبتمبر 2015 على موقع واي باك مشين.
- - اللغة البرمجية C- http://boredzo.org/pointers/#arrays، اطلع عليه بتاريخ 15-08-2014 نسخة محفوظة 19 أغسطس 2014 على موقع واي باك مشين.
- Efficient Array & Pointer Bound Checking Against Buffer Overflow Attacks - University of Texas at Dallas ، اطلع عليه بتاريخ 15-08-2014 نسخة محفوظة 16 أبريل 2007 على موقع واي باك مشين.
- One-Based and Zero-Based Indexing، اطلع عليه بتاريخ 15-08-2014 نسخة محفوظة 19 أغسطس 2014 على موقع واي باك مشين.
- Introduction to Arrays، اطلع عليه بتاريخ 15-08-2014 نسخة محفوظة 15 أبريل 2017 على موقع واي باك مشين.
- بوابة برمجة الحاسوب