شرح ++Data Structure C || تعلم c++ خطوة بخطوة


C++ Data Structures هياكل البيانات


يتم تحديد المتغيرات التي تجمع بين العديد من عناصر البيانات من نفس النوع بواسطة Structures  في C أو C ++. في حين أن أنواع البيانات التي تسمح للمبرمج بدمج عناصر البيانات من الأنواع المختلفة هي نوع من أنواع البيانات التي يحددها المستخدم والتي تُعرف باسم data structure في C ++.

من أجل الاحتفاظ بسجل لشيء ما أو تمثيله، يتم استخدام Structures في C ++.
على سبيل المثال، لنفترض أنك تريد الاحتفاظ بكتبك في مكتبة وتفكر في الميزات التالية لكل كتاب:

  العنوان
  الكاتب
  القضية
  Book ID


يجب عليك استخدام العبارة الهيكلية لتعريف الهيكل. يعرّف الأمر Structure نوع بيانات جديد يحتوي على أكثر من عضو. الشكل العام للهيكل هو كما يلي:

struct [structure tag] {
member definition;
member definition;
...
member definition;
} [one or more structure variables];

قسم  structure tag  وتعريف متغيرات البنية هما نفس تعريف المتغير العادي مثل int i ؛ أو float f ؛ أو أي نوع آخر من البيانات. في نهاية تعريف البنية وقبل الفاصلة المنقوطة الأخيرة، يمكنك تحديد المتغيرات الخاصة بك من نوع البنية، ولكن هذا اختياري تمامًا. يوضح المثال التالي كيفية الإعلان عن بنية Book:

struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
} book;

Accessing Structure Members


نستخدم المشغل (.) للوصول إلى أعضاء الهيكل. يجب عليك استخدام الكلمة الأساسية الهيكلية لتحديد متغيرات structure. يوضح المثال التالي كيفية استخدام البنية:

#include <iostream>
#include <cstring>

using namespace std;

struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
};

int main() {
struct Books Book1; // Declare Book1 of type Book
struct Books Book2; // Declare Book2 of type Book

// book 1 specification
strcpy( Book1.title, "Learn C++ Programming");
strcpy( Book1.author, "Chand Miyan");
strcpy( Book1.subject, "C++ Programming");
Book1.book_id = 6495407;

// book 2 specification
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Yakit Singha");
strcpy( Book2.subject, "Telecom");
Book2.book_id = 6495700;

// Print Book1 info
cout << "Book 1 title : " << Book1.title <<endl;
cout << "Book 1 author : " << Book1.author <<endl;
cout << "Book 1 subject : " << Book1.subject <<endl;
cout << "Book 1 id : " << Book1.book_id <<endl;

// Print Book2 info
cout << "Book 2 title : " << Book2.title <<endl;
cout << "Book 2 author : " << Book2.author <<endl;
cout << "Book 2 subject : " << Book2.subject <<endl;
cout << "Book 2 id : " << Book2.book_id <<endl;

return 0;
}


بعد تجميع وتنفيذ الكود أعلاه، يتم عرض النتيجة التالية:

Book 1 title : Learn C++ Programming
Book 1 author : Chand Miyan
Book 1 subject : C++ Programming
Book 1 id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Yakit Singha
Book 2 subject : Telecom
Book 2 id : 6495700


Structures as Function Arguments


يمكن تمرير structure  كوسيطة دالة والطريقة مشابهة جدًا للطريقة التي يتم بها تمرير أي متغير أو مؤشر آخر في C ++. يمكنك الوصول إلى متغيرات الهيكل تمامًا مثل المثال أعلاه.

#include <iostream>
#include <cstring>

using namespace std;
void printBook( struct Books *book );

struct Books {
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
int main() {
   struct Books Book1;        // Declare Book1 of type Book
   struct Books Book2;        // Declare Book2 of type Book

   // Book 1 specification
   strcpy( Book1.title, "Learn C++ Programming");
   strcpy( Book1.author, "Chand Miyan");
   strcpy( Book1.subject, "C++ Programming");
   Book1.book_id = 6495407;

   // Book 2 specification
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Yakit Singha");
   strcpy( Book2.subject, "Telecom");
   Book2.book_id = 6495700;

   // Print Book1 info, passing address of structure
   printBook( &Book1 );

   // Print Book1 info, passing address of structure
   printBook( &Book2 );

   return 0;
}

// This function accept pointer to structure as parameter.
void printBook( struct Books *book ) {
   cout << "Book title : " << book->title <<endl;
   cout << "Book author : " << book->author <<endl;
   cout << "Book subject : " << book->subject <<endl;
   cout << "Book id : " << book->book_id <<endl;
}



بعد تجميع وتنفيذ الكود أعلاه، يتم عرض النتيجة التالية:

Book title : Learn C++ Programming
Book author : Chand Miyan
Book subject : C++ Programming
Book id : 6495407
Book title : Telecom Billing
Book author : Yakit Singha
Book subject : Telecom
Book id : 6495700

Pointers to Structures


يمكنك استخدام مؤشر لهيكل تمامًا بنفس الطريقة التي يحدد بها أي مبرمج المؤشر لبعض المتغيرات الأخرى:

struct Books *struct_pointer;

يمكنك الآن تخزين عنوان متغير البنية في متغير المؤشر المحدد أعلاه. للوصول إلى عنوان البنية المتغيرة، ضع عامل التشغيل & قبل اسم البنية على النحو التالي:

struct_pointer = &Book1;

عند تحديد مؤشر في بنية، يجب عليك استخدام عامل التشغيل <- كما في المثال التالي للوصول إلى أعضاء الهيكل:

struct_pointer->title;

الآن نقوم بتغيير المثال أعلاه إلى هيكل باستخدام مؤشر:
#include <iostream>
#include <cstring>

using namespace std;
void printBook( struct Books *book );

struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main() {
struct Books Book1; // Declare Book1 of type Book
struct Books Book2; // Declare Book2 of type Book

// Book 1 specification
strcpy( Book1.title, "Learn C++ Programming");
strcpy( Book1.author, "Chand Miyan");
strcpy( Book1.subject, "C++ Programming");
Book1.book_id = 6495407;

// Book 2 specification
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Yakit Singha");
strcpy( Book2.subject, "Telecom");
Book2.book_id = 6495700;

// Print Book1 info, passing address of structure
printBook( &Book1 );

// Print Book1 info, passing address of structure
printBook( &Book2 );

return 0;
}

// This function accept pointer to structure as parameter.
void printBook( struct Books *book ) {
cout << "Book title : " << book->title <<endl;
cout << "Book author : " << book->author <<endl;
cout << "Book subject : " << book->subject <<endl;
cout << "Book id : " << book->book_id <<endl;
}

بعد تجميع وتنفيذ الكود أعلاه، يتم عرض النتيجة التالية:

Book title : Learn C++ Programming
Book author : Chand Miyan
Book subject : C++ Programming
Book id : 6495407
Book title : Telecom Billing
Book author : Yakit Singha
Book subject : Telecom
Book id : 6495700

The typedef Keyword


هناك طريقة أسهل لتحديد الهياكل التي يمكنك تحديدها باستخدام نوع "alias":

typedef struct {
char title[50];
char author[50];
char subject[100];
int book_id;
} Books;

يمكنك الآن استخدام الكتب مباشرةً لتحديد متغيراتها دون استخدام الكلمة الأساسية الهيكلية. تأمل المثال التالي:

Books Book1, Book2;

باستخدام typedef، يمكنك أيضًا تحديد الأسماء المستعارة لأنواع البيانات الأخرى: 

typedef long int *pint32;

pint32 x, y, z;

المتغيرات x و y و z كلها مؤشرات في ints الطويلة.


كلمات مفتاحية: