ما هي هياكل البيانات في جيم وكيفية استخدامها؟

نشرت: 2021-02-26

جدول المحتويات

مقدمة

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

أنواع

تنتشر هياكل البيانات وتستخدم في كل نظام برمجي تقريبًا. بعض الأمثلة الأكثر شيوعًا لهياكل البيانات هي المصفوفات وقوائم الانتظار والمكدسات والقوائم المرتبطة والأشجار.

التطبيقات

في تصميم المجمعات وأنظمة التشغيل وإنشاء قواعد البيانات وتطبيقات الذكاء الاصطناعي وغيرها الكثير.

تصنيف

يتم تصنيف هياكل البيانات إلى فئتين: هياكل البيانات البدائية وهياكل البيانات غير البدائية.

1. بدائي: هي أنواع البيانات الأساسية التي تدعمها لغة برمجة. من الأمثلة الشائعة على هذا التصنيف الأعداد الصحيحة والأحرف والمنطقية.

2. غير بدائي: يتم إنشاء هذه الفئات من هياكل البيانات باستخدام هياكل البيانات البدائية. تتضمن الأمثلة الكدسات المرتبطة والقوائم المرتبطة والرسوم البيانية والأشجار.

المصفوفات

المصفوفة عبارة عن مجموعة بسيطة من عناصر البيانات التي لها نفس نوع البيانات. هذا يعني أن مصفوفة من نوع الأعداد الصحيحة يمكنها فقط تخزين قيم أعداد صحيحة. يمكن لمصفوفة من عائم نوع البيانات تخزين القيم التي تتوافق مع نوع البيانات العائمة ولا شيء آخر.

يمكن الوصول إلى العناصر المخزنة في مصفوفة خطيًا وهي موجودة في كتل متجاورة من الذاكرة يمكن الرجوع إليها باستخدام فهرس.

إعلان مصفوفة

في لغة C ، يمكن التصريح عن المصفوفة على أنها:

اسم نوع البيانات [الطول] ؛

علي سبيل المثال،

أوامر int [10] ؛

ينشئ سطر التعليمات البرمجية أعلاه مصفوفة من 10 كتل ذاكرة يمكن تخزين قيمة عدد صحيح فيها. في C ، تبدأ قيمة فهرس المصفوفة من 0. لذا فإن قيم الفهرس ستتراوح من 0 إلى 9. إذا أردنا الوصول إلى أي قيمة معينة في تلك المصفوفة ، فعلينا ببساطة كتابة:

printf (أمر [index_number]) ؛

هناك طريقة أخرى لتصريح المصفوفة كما يلي:

data_type array_name [size] = {list of value} ؛

علي سبيل المثال،

علامات int [5] = {9، 8، 7، 9، 8} ؛

ينشئ سطر الأمر أعلاه مصفوفة بها 5 كتل ذاكرة بقيم ثابتة في كل كتلة. في برنامج التحويل البرمجي 32 بت ، تبلغ مساحة الذاكرة 32 بت التي يشغلها نوع البيانات int 4 بايت. لذلك ، ستستهلك 5 كتل من الذاكرة 20 بايت من الذاكرة.

هناك طريقة شرعية أخرى لتهيئة المصفوفات وهي:

علامات int [5] = {9، 45} ؛

سينشئ هذا الأمر مصفوفة من 5 كتل ، مع وجود 0 في آخر 3 كتل.

طريقة شرعية أخرى هي:

علامات int [] = {9، 5، 2، 1، 3،4} ؛

يفهم مترجم C أن هناك حاجة إلى 5 كتل فقط لتلائم هذه البيانات في مصفوفة. لذلك سوف يقوم بتهيئة مصفوفة من علامات الأسماء بحجم 5.

وبالمثل ، يمكن تهيئة صفيف ثنائي الأبعاد بالطريقة التالية

علامات int [2] [3] = {{9،7،7} ، {6، 2، 1}} ؛

سينشئ الأمر أعلاه صفيفًا ثنائي الأبعاد يحتوي على صفين و 3 أعمدة.

قراءة: موضوعات وأفكار مشروع هيكل البيانات

عمليات

هناك بعض العمليات التي يمكن إجراؤها على المصفوفات. علي سبيل المثال:

  1. عبور مجموعة
  2. إدخال عنصر في المصفوفة
  3. البحث عن عنصر معين في المصفوفة
  4. حذف عنصر معين من المصفوفة
  5. دمج المصفوفتين و ،
  6. فرز المصفوفة - بترتيب تصاعدي أو تنازلي.

سلبيات

الذاكرة المخصصة للمصفوفة ثابتة. هذه في الواقع مشكلة. لنفترض أننا أنشأنا مصفوفة بحجم 50 ووصلنا إلى 30 كتلة فقط من الذاكرة. 20 كتلة المتبقية تشغل الذاكرة دون أي استخدام. لذلك ، لمعالجة هذه المشكلة ، لدينا قائمة مرتبطة.

قائمة مرتبطة

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

الجزء الثاني هو مؤشر يشير إلى الكتلة التالية في قائمة مرتبطة. يخزن المؤشر عنوان الكتلة التالية التي تحتوي على البيانات. يوجد مؤشر آخر يعرف بمؤشر الرأس. يشير الرأس إلى أول كتلة من الذاكرة في القائمة المرتبطة. فيما يلي تمثيل القائمة المرتبطة. يشار إلى هذه الكتل أيضًا باسم "العقد".

مصدر

تهيئة القوائم المرتبطة

لتهيئة قائمة الارتباط ، نقوم بإنشاء عقدة أسماء بنية. الهيكل له شيئين. 1. البيانات التي تحتوي عليها و 2. المؤشر الذي يشير إلى العقدة التالية. سيكون نوع بيانات المؤشر هو نوع الهيكل لأنه يشير إلى عقدة الهيكل.

عقدة البنية

{

بيانات int؛

عقدة الهيكل * التالي ؛

} ؛

في القائمة المرتبطة ، لن يشير مؤشر العقدة الأخيرة إلى أي شيء ، أو ببساطة ، سوف يشير إلى الصفر.

اقرأ أيضًا: الرسوم البيانية في بنية البيانات

اجتياز القائمة المرتبطة

في القائمة المرتبطة ، لن يشير مؤشر العقدة الأخيرة إلى أي شيء ، أو ببساطة ، سيشير إلى الصفر. لذلك لاجتياز قائمة مرتبطة بالكامل ، نقوم بإنشاء مؤشر وهمي يشير في البداية إلى الرأس. وبالنسبة لطول القائمة المرتبطة ، يستمر المؤشر في التحرك للأمام حتى يشير إلى قيمة خالية أو يصل إلى آخر عقدة في القائمة المرتبطة.

إضافة عقدة

ستكون خوارزمية إضافة عقدة قبل عقدة معينة على النحو التالي:

  1. ضع مؤشرين وهميين (ptr و preptr) يشيران إلى الرأس في البداية
  2. انقل ptr إلى أن ptr.data تساوي البيانات قبل أن نعتزم إدراج العقدة. سيكون preptr 1 عقدة خلف ptr.
  3. أنشئ عقدة
  4. العقدة التي يشير إليها preptr الوهمي ، ستشير تلك العقدة التالية إلى هذه العقدة الجديدة
  5. سوف تشير العقدة الجديدة التالية إلى ptr.

سيتم إجراء خوارزمية إضافة عقدة بعد بيانات معينة بطريقة مماثلة.

مزايا القائمة المرتبطة

  1. حجم ديناميكي على عكس المصفوفة
  2. إجراء الإدراج والحذف أسهل في القائمة المرتبطة منه في المصفوفة.

طابور

تتبع قائمة الانتظار نوع النظام First In First Out أو FIFO. في تطبيق المصفوفة ، سيكون لدينا مؤشرين لتوضيح حالة استخدام قائمة الانتظار.

مصدر

يعني ما يرد أولاً يصرف أولاً (FIFO) أن القيمة التي تدخل المكدس أولاً ، تترك المصفوفة أولاً. في الرسم التخطيطي لقائمة الانتظار أعلاه ، يشير المؤشر الأمامي إلى القيمة 7. إذا حذفنا الكتلة الأولى (dequeue) ، فستشير الجبهة الآن إلى القيمة 2. وبالمثل ، إذا أدخلنا رقمًا (قائمة) ، على سبيل المثال ، 3 في الموضع 5. بعد ذلك ، سيشير المؤشر الخلفي إلى الموضع 5.

شروط تجاوز وتحت التدفق

ومع ذلك ، قبل إدخال قيمة البيانات في قائمة الانتظار ، يجب أن نتحقق من شروط تجاوز السعة. سيحدث تجاوز السعة عندما تكون هناك محاولة لإدراج عنصر في قائمة انتظار ممتلئة بالفعل. ستمتلئ قائمة الانتظار عندما تكون الخلفية = max_size – 1.

وبالمثل ، قبل حذف البيانات من قائمة الانتظار ، يجب أن نتحقق من ظروف التدفق المنخفض. سيحدث التدفق السفلي عندما تكون هناك محاولة لحذف عنصر من قائمة انتظار فارغة بالفعل ، أي إذا كانت الجبهة = فارغة والخلفية = فارغة ، فإن قائمة الانتظار تكون فارغة.

كومة

المكدس عبارة عن بنية بيانات نقوم فيها بإدراج العناصر وحذفها في طرف واحد فقط ، والمعروف أيضًا باسم الجزء العلوي من المكدس. لذلك يُشار إلى تنفيذ المكدس على أنه تنفيذ الوارد أخيرًا يصرف أولاً (LIFO). على عكس قائمة الانتظار ، بالنسبة للمكدس ، فإننا نحتاج فقط إلى مؤشر علوي واحد.

إذا أردنا إدخال (دفع) عناصر في مصفوفة ، يتحرك المؤشر العلوي لأعلى أو يزيد بمقدار 1. إذا أردنا حذف (فرقعة) عنصر ، فإن المؤشر العلوي ينخفض ​​بمقدار 1 أو ينخفض ​​بمقدار وحدة واحدة. يدعم المكدس ثلاث عمليات أساسية: الدفع والفرقعة والنظرة. عملية الزقزقة هي ببساطة عرض العنصر الأعلى في المكدس.

مصدر

تعلم دورات البرمجيات عبر الإنترنت من أفضل الجامعات في العالم. اربح برامج PG التنفيذية أو برامج الشهادات المتقدمة أو برامج الماجستير لتتبع حياتك المهنية بشكل سريع.

خاتمة

في هذه المقالة ، تحدثنا عن 4 أنواع من هياكل البيانات وهي المصفوفات والقوائم المرتبطة وقوائم الانتظار والمكدسات. آمل أن تكون قد أحببت هذا المقال وترقب المزيد من القراءات الشيقة. حتى المرة القادمة.

إذا كنت مهتمًا بمعرفة المزيد حول Javascript ، التطوير الكامل ، تحقق من upGrad & IIIT-B's Executive PG Program in Full-stack Software Development المصمم للمهنيين العاملين ويقدم أكثر من 500 ساعة من التدريب الصارم ، 9+ مشاريع ، والمهام ، وحالة خريجي IIIT-B ، ومشاريع التخرج العملية العملية والمساعدة في العمل مع الشركات الكبرى.

ما هي هياكل البيانات في البرمجة؟

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

ما هي الاختلافات بين القائمة المرتبطة والمصفوفات؟

في المصفوفات ، يتم استخدام الفهرس للوصول إلى عنصر. يتم تنظيم العناصر في المصفوفة بترتيب تسلسلي ، مما يسهل الوصول إلى العناصر وتعديلها إذا تم استخدام فهرس. المصفوفة لها حجم ثابت. يتم تخصيص العناصر في وقت إنشائها. في القائمة المرتبطة ، يتم استخدام مؤشر للوصول إلى عنصر. لا يتم بالضرورة تخزين عناصر القائمة المرتبطة بترتيب تسلسلي. القائمة المرتبطة لها حجم غير معروف لأنه يمكن أن تحتوي على عقد في وقت إنشائها. يتم استخدام المؤشر للوصول إلى عنصر ، لذلك يكون تخصيص الذاكرة أسهل.

ما هو المؤشر في سي؟

المؤشر هو نوع بيانات في لغة سي يخزن عنوان أي متغير أو وظيفة. يتم استخدامه بشكل عام كمرجع إلى موقع ذاكرة آخر. يمكن أن يحتوي المؤشر على عنوان ذاكرة لمصفوفة أو بنية أو وظيفة أو أي نوع آخر. يستخدم C المؤشرات لتمرير القيم إلى الدوال واستلامها منها. تُستخدم المؤشرات لتخصيص مساحة الذاكرة ديناميكيًا.