يتم تعريف المصفوفة على أنها مجموعة من أنواع مماثلة من عناصر البيانات المخزنة في مواقع الذاكرة المتجاورة. المصفوفات هي نوع البيانات المشتقة في لغة البرمجة C والتي يمكنها تخزين النوع البدائي من البيانات مثل int وchar وdouble وfloat وما إلى ذلك. كما أن لديها القدرة على تخزين مجموعة أنواع البيانات المشتقة، مثل المؤشرات والبنية و إلخ. المصفوفة هي أبسط بنية بيانات حيث يمكن الوصول إلى كل عنصر بيانات بشكل عشوائي باستخدام رقم الفهرس الخاص به.
تعد مجموعة C مفيدة إذا كان عليك تخزين عناصر مماثلة. على سبيل المثال، إذا أردنا تخزين درجات طالب في 6 مواد، فلن نحتاج إلى تحديد متغيرات مختلفة للعلامات في المادة المختلفة. بدلاً من ذلك، يمكننا تحديد مصفوفة يمكنها تخزين العلامات في كل موضوع في مواقع الذاكرة المتجاورة.
باستخدام المصفوفة، يمكننا الوصول إلى العناصر بسهولة. مطلوب فقط بضعة أسطر من التعليمات البرمجية للوصول إلى عناصر المصفوفة.
خصائص المصفوفة
تحتوي المصفوفة على الخصائص التالية.
- كل عنصر في المصفوفة له نفس نوع البيانات ويحمل نفس الحجم، أي int = 4 بايت.
- يتم تخزين عناصر المصفوفة في مواقع ذاكرة متجاورة حيث يتم تخزين العنصر الأول في أصغر موقع في الذاكرة.
- يمكن الوصول إلى عناصر المصفوفة بشكل عشوائي حيث يمكننا حساب عنوان كل عنصر في المصفوفة باستخدام العنوان الأساسي المحدد وحجم عنصر البيانات.
الاستفادة من صفيف C
1) تحسين الكود : رمز أقل للوصول إلى البيانات.
2) سهولة العبور : باستخدام حلقة for يمكننا استرجاع عناصر المصفوفة بسهولة.
3) سهولة الفرز : لفرز عناصر المصفوفة، نحتاج إلى بضعة أسطر من التعليمات البرمجية فقط.
4) الوصول العشوائي : يمكننا الوصول إلى أي عنصر بشكل عشوائي باستخدام المصفوفة.
عيوب مصفوفة C
1) حجم ثابت : مهما كان الحجم الذي نحدده في وقت الإعلان عن المصفوفة، لا يمكننا تجاوز الحد. لذا، فهو لا يكبر الحجم ديناميكيًا مثل LinkedList الذي سنتعلمه لاحقًا.
إعلان صفيف C
يمكننا أن نعلن عن مصفوفة في لغة C بالطريقة التالية.
data_type array_name[array_size];
الآن، دعونا نرى المثال للإعلان عن المصفوفة.
int marks[5];
هنا، int هو نوع البيانات ، العلامات هي array_name ، و5 هو array_size .
تهيئة صفيف C
إن أبسط طريقة لتهيئة المصفوفة هي باستخدام فهرس كل عنصر. يمكننا تهيئة كل عنصر من عناصر المصفوفة باستخدام الفهرس. النظر في المثال التالي.
كيفية تعطيل وضع المطور
marks[0]=80;//initialization of array marks[1]=60; marks[2]=70; marks[3]=85; marks[4]=75;
مثال على مجموعة C
#include int main(){ int i=0; int marks[5];//declaration of array marks[0]=80;//initialization of array marks[1]=60; marks[2]=70; marks[3]=85; marks[4]=75; //traversal of array for(i=0;i<5;i++){ printf('%d ',marks[i]); } end of for loop return 0; < pre> <p> <strong>Output</strong> </p> <pre> 80 60 70 85 75 </pre> <h2>C Array: Declaration with Initialization</h2> <p>We can initialize the c array at the time of declaration. Let's see the code.</p> <pre> int marks[5]={20,30,40,50,60}; </pre> <p>In such case, there is <strong>no requirement to define the size</strong> . So it may also be written as the following code.</p> <pre> int marks[]={20,30,40,50,60}; </pre> <p>Let's see the C program to declare and initialize the array in C.</p> <pre> #include int main(){ int i=0; int marks[5]={20,30,40,50,60};//declaration and initialization of array //traversal of array for(i=0;i<5;i++){ printf('%d ',marks[i]); } return 0; < pre> <p> <strong>Output</strong> </p> <pre> 20 30 40 50 60 </pre> <h2>C Array Example: Sorting an array</h2> <p>In the following program, we are using bubble sort method to sort the array in ascending order.</p> <pre> #include void main () { int i, j,temp; int a[10] = { 10, 9, 7, 101, 23, 44, 12, 78, 34, 23}; for(i = 0; i<10; i++) { for(j="i+1;" j a[i]) temp="a[i];" a[i]="a[j];" a[j]="temp;" } printf('printing sorted element list ... '); for(i="0;" i<10; printf('%d ',a[i]); < pre> <h2>Program to print the largest and second largest element of the array.</h2> <pre> #include void main () { int arr[100],i,n,largest,sec_largest; printf('Enter the size of the array?'); scanf('%d',&n); printf('Enter the elements of the array?'); for(i = 0; i<n; i++) { scanf('%d',&arr[i]); } largest="arr[0];" sec_largest="arr[1];" for(i="0;ilargest)" else if (arr[i]>sec_largest && arr[i]!=largest) { sec_largest=arr[i]; } } printf('largest = %d, second largest = %d',largest,sec_largest); } </n;></pre> <hr></10;></pre></5;i++){></pre></5;i++){>
صفيف C: الإعلان مع التهيئة
يمكننا تهيئة المصفوفة c في وقت الإعلان. دعونا نرى الرمز.
int marks[5]={20,30,40,50,60};
في مثل هذه الحالة، هناك لا يوجد شرط لتحديد الحجم . لذلك يمكن كتابته أيضًا بالرمز التالي.
int marks[]={20,30,40,50,60};
دعونا نرى برنامج C للإعلان عن المصفوفة وتهيئتها في لغة C.
#include int main(){ int i=0; int marks[5]={20,30,40,50,60};//declaration and initialization of array //traversal of array for(i=0;i<5;i++){ printf(\'%d \',marks[i]); } return 0; < pre> <p> <strong>Output</strong> </p> <pre> 20 30 40 50 60 </pre> <h2>C Array Example: Sorting an array</h2> <p>In the following program, we are using bubble sort method to sort the array in ascending order.</p> <pre> #include void main () { int i, j,temp; int a[10] = { 10, 9, 7, 101, 23, 44, 12, 78, 34, 23}; for(i = 0; i<10; i++) { for(j="i+1;" j a[i]) temp="a[i];" a[i]="a[j];" a[j]="temp;" } printf(\'printing sorted element list ... \'); for(i="0;" i<10; printf(\'%d \',a[i]); < pre> <h2>Program to print the largest and second largest element of the array.</h2> <pre> #include void main () { int arr[100],i,n,largest,sec_largest; printf('Enter the size of the array?'); scanf('%d',&n); printf('Enter the elements of the array?'); for(i = 0; i<n; i++) { scanf(\'%d\',&arr[i]); } largest="arr[0];" sec_largest="arr[1];" for(i="0;ilargest)" else if (arr[i]>sec_largest && arr[i]!=largest) { sec_largest=arr[i]; } } printf('largest = %d, second largest = %d',largest,sec_largest); } </n;></pre> <hr></10;></pre></5;i++){>
مثال على صفيف C: فرز صفيف
في البرنامج التالي، نستخدم طريقة الفرز الفقاعي لفرز المصفوفة بترتيب تصاعدي.
#include void main () { int i, j,temp; int a[10] = { 10, 9, 7, 101, 23, 44, 12, 78, 34, 23}; for(i = 0; i<10; i++) { for(j="i+1;" j a[i]) temp="a[i];" a[i]="a[j];" a[j]="temp;" } printf(\'printing sorted element list ... \'); for(i="0;" i<10; printf(\'%d \',a[i]); < pre> <h2>Program to print the largest and second largest element of the array.</h2> <pre> #include void main () { int arr[100],i,n,largest,sec_largest; printf('Enter the size of the array?'); scanf('%d',&n); printf('Enter the elements of the array?'); for(i = 0; i<n; i++) { scanf(\'%d\',&arr[i]); } largest="arr[0];" sec_largest="arr[1];" for(i="0;ilargest)" else if (arr[i]>sec_largest && arr[i]!=largest) { sec_largest=arr[i]; } } printf('largest = %d, second largest = %d',largest,sec_largest); } </n;></pre> <hr></10;>
10;>5;i++){>5;i++){>