هياكل البيانات (struct)

وقت القراءة: 7 دقائق 312 مشاهدة

في عالم البرمجة، تلعب هياكل البيانات دورًا محوريًا في كيفية تنظيم البيانات ومعالجتها بكفاءة. إنها بمثابة اللبنات الأساسية التي تمكننا من إنشاء برامج جيدة البناء والتنظيم. في هذا الشرح، سوف نتعمق في بنية بيانات أساسية واحدة في لغة C++ تُعرف باسم struct.

ما هي بنية البيانات؟

قبل أن نستكشف struct، دعونا نحدد ما هي بنية البيانات. بنية البيانات هي طريقة لتنظيم البيانات وتخزينها في ذاكرة الكمبيوتر لإجراء العمليات على تلك البيانات بكفاءة أكبر. حيث أنها توفر مخططًا لتخزين واسترجاع المعلومات.

مقدمة لـstruct في لغة C++

struct في C++ هي نوع بيانات محدد من قبل المستخدم يسمح لك بتجميع متغيرات أنواع البيانات المختلفة معًا تحت اسم واحد. فكر في الأمر على أنه إنشاء نوع بيانات مخصص مصمم خصيصًا لتلبية الاحتياجات المحددة لبرنامجك. وهذا يجعل التعليمات البرمجية الخاصة بك أكثر نمطية وتنظيمًا وأسهل للفهم.

بناء جملة struct:

بناء الجملة لتعريف struct واضح ومباشر:

struct MyStruct

struct MyStruct

مثال 1:

#include <iostream>
#include <string>
using namespace std;
struct car
{
    string name;
    string color;
    int maxSpeed;
    int model;
};
int main()
{
    car x;
    x.name = "Rolls-Royce";
    x.color = "Red";
    x.model = 2019;
    x.maxSpeed = 270;
    
    cout << x.name << endl;
    return 0;
}

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

النقاط الرئيسية:

  • تعريف الـStruct (السيارة):
    تحتوي الـstruct المسماة car على أربعة متغيرات للأعضاء: الاسم name واللون color والسرعة القصوى maxSpeed والطراز model. تقوم هذه المتغيرات بتخزين معلومات حول السيارة.
  • Instance Creation إنشاء المثيل (x):
    يتم إنشاء المثيل (instance) لـstruct السيارة المسمى x في الدالة الرئيسية. يمكن لهذا المثيل تخزين معلومات حول سيارة معينة.
  • تعيين القيم:
    يتم تعيين القيم لمتغيرات الأعضاء للمثيل x باستخدام notation النقطة (.). على سبيل المثال، x.name = "Rolls-Royce" يعين الاسم "Rolls-Royce" لمتغير عضو الاسم.
  • طباعة المعلومات:
    يقوم البرنامج بطباعة اسم السيارة باستخدام cout << x.name << endl;. في هذه الحالة، سيتم إخراج "Rolls-Royce" إلى شاشة المخرجات.

المخرجات:
إذا قمت بتشغيل هذا البرنامج، فإن المخرجات ستكون كالتالي:

Rolls-Royce

مثال 2:

إليك طريقة أخرى لتفعيل القيم بناءً على المثال السابق:

#include <iostream>
#include <string>
using namespace std;
struct car
{
    string name;
    string color;
    int maxSpeed;
    int model;
};
int main()
{
    car x = {"BMW","Blue",250,2016};
    cout << x.maxSpeed << endl;
    return 0;
}

المخرجات:

250

مثال 3:

#include <iostream>
#include <string>
using namespace std;
struct car
{
    string name;
    string color;
    int maxSpeed;
    int model;
};
int main()
{
    car x = {"BMW","Blue",250,2016};
    car y = x;
    cout << y.name << endl;
    return 0;
}

إنشاء المثيل وتفعيله (x وy):

  • يتم إنشاء مثيل لـstruct السيارة المسمى x بالقيم الأولية.
  • يتم إنشاء مثيل آخر يسمى y وتفعيله بقيم x. هذه نسخة من الأعضاء، وكل عضو في y يحصل على قيمة العضو المقابل في x.

مثال 4:

#include <iostream>
#include <string>
using namespace std;
struct car
{
    string name;
    string color;
    int maxSpeed;
    int model;
}y;
int main()
{
    car x = {"BMW","Blue",250,2016};
    car y = {"Mercedes","Red",300,2016};
    if (x.maxSpeed > y.maxSpeed)
        cout << "car x is faster than car y";
    else
        cout << "car y is faster than car x";
    return 0;
}
  • إعلان المثيل العالمي (y):
    تم الإعلان عن مثيل لـstruct السيارة المسمى y في النطاق العالمي. وهذا يعني أنه يمكن الوصول إليه في جميع أنحاء البرنامج.
  • إنشاء المثيل وتفعيله (x وy المحلي):
    - يتم إنشاء مثيل محلي لـstruct السيارة المسماة x بقيم أولية.
    - يتم إنشاء مثيل محلي آخر يسمى y بقيم مختلفة. هذا y محلي للدالة الرئيسية ويغطي على y العام ضمن هذا النطاق.
  • المقارنة والمخرجات:
    يقوم البرنامج بمقارنة السرعات القصوى للسيارات x و y ويطبع رسالة تشير إلى السيارة الأسرع.

المخرجات:
إذا قمت بتشغيل هذا البرنامج، فإن المخرجات ستعتمد على القيم المخصصة لـ maxSpeed في x وy. بالنسبة للقيم المقدمة، ستكون المخرجات:

car y is faster than car x

تمرير 'struct' إلى دالّة:

مثال 5:

#include <iostream>
#include <string>
using namespace std;
struct car
{
    string name;
    string color;
    int maxSpeed;
    int model;
};
void f(car f)
{
    cout << "Name = " << f.name << endl;
    cout << "Color = " << f.color << endl;
}
int main()
{
    car v = {"No name","Red",160,2000};
    f(v);
    return 0;
}

النقاط الرئيسية:

  • تعريف الدالة (f):
    تأخذ الدالة f السيارة كـparameter وتطبع معلومات حول السيارة، تحديدًا الاسم واللون.
  • إنشاء المثيل وتفعيله (v):
    يتم إنشاء مثيل لبنية السيارة المسماة v بالقيم الأولية.
  • استدعاء الدالة (f(v)):
    يستدعي البرنامج الدالة f مع مثيل v كـargument.

المخرجات:
إذا قمت بتشغيل هذا البرنامج، فإن المخرجات ستكون كالتالي:

Name = No name
Color = Red

مثال 6:

#include <iostream>
#include <string>
using namespace std;
struct car
{
    string name;
    string color;
    int maxSpeed;
    int model;
};
car read_return(car&s)
{
    cout << "Enter car name:\n";
    cin >> s.name;
    cout << "Enter car color:\n";
    cin >> s.color;
    cout << "Enter car maximum speed:\n";
    cin >> s.maxSpeed;
    cout << "Enter car model:\n";
    cin >> s.model;
    return s;
}
int main()
{
    car v;
    read_return(v);
    car h;
    h = v;
    cout << h.name << endl;
    return 0;
}

النقاط الرئيسية:

  • تعريف الدالة (read_return):
    تأخذ الدالة read_return مرجع السيارة كـparameter، وتقرأ المدخلات لملء حقولها، وترجع struct السيارة المعدلة.
  • استدعاء الدالة (read_return(v)):
    يستدعي البرنامج الدالة read_return مع مثيل v كمرجع، مما يسمح للدالة بتعديل قيم v.
  • التعيين والطباعة:
    - يتم تعيين قيم v إلى h.
    - يقوم البرنامج بطباعة اسم h.

المخرجات:
إذا قمت بتشغيل هذا البرنامج وأدخلت قيمًا عند مطالبتك بذلك، فسوف تعتمد المخرجات على الإدخال المقدم. على سبيل المثال:

Enter car name:
BMW
Enter car color:
Blue
Enter car maximum speed:
250
Enter car model:
2022
BMW

مثال 7:

#include <iostream>
#include <string>
using namespace std;
struct car
{
    string name;
    string color;
    int maxSpeed;
    int model;
    void fun(car n)
    {
        cout << n.name << endl;
    }
};

int main()
{
    car v = {"Kia"};
    v.fun(v);
    return 0;
}

النقاط الرئيسية:

  • تعريف الدالة الضمنية (fun):
    يتم تعريف الدالة الضمنية fun داخل هيكل السيارة.
    يأخذ السيارة كـparameter ويطبع اسمها.

المخرجات:
إذا قمت بتشغيل هذا البرنامج، فإن المخرجات ستكون كالتالي:

Kia

مثال 8:

#include <iostream>
#include <string>
using namespace std;
struct car
{
    string name;
    string color;
    int maxSpeed;
    int model;
    void fun(car n)
    {
        cout << n.name << endl;
    }
};

int main()
{
    car*h;
    car b = {"Toyota","Red",170,2008};
    h = &b;
    cout << h->color << endl;
    return 0;
}

النقاط الرئيسية:

  • إعلان المؤشر وتفعيله (h):
    تم الإعلان عن مؤشر لسيارة اسمها h.
  • إنشاء المثيل وتفعيله (b):
    يتم إنشاء مثيل لبنية السيارة المسماة b وتهيئته بقيم محددة.
  • تعيين المؤشر (h = &b):
    يتم تعيين عنوان b للمؤشر h.
  • Dereferencing المؤشر (h->color):
    يقوم البرنامج بطباعة لون السيارة المشار إليها بالحرف h باستخدام عامل السهم (->).

المخرجات:
إذا قمت بتشغيل هذا البرنامج، فإن المخرجات ستكون كالتالي:

Red

 

مشاركة هذا

هياكل البيانات (struct)

Or copy link

المحتوى
Arabic