# بنية بيانات

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

## استخدامها

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

## التنفيذ

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

## أمثلة

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

## دعم اللغة

تفتقر معظم لغات التجميع وبعض اللغات منخفضة المستوى، مثل BCPL (Basic Combined Programming Language)، إلى الدعم المدمج لبنى البيانات. من ناحية أخرى، فإن العديد من لغات البرمجة عالية المستوى وبعض لغات التجميع عالية المستوى، مثل MASM، لها بناء جملة خاص أو دعم آخر مدمج لبنى بيانات معينة، مثل السجلات والمصفوفات. على سبيل المثال، تدعم لغات C (سليل مباشر لـ BCPL) وباسكال البنيات والسجلات، على التوالي، بالإضافة إلى المتجهات (المصفوفات أحادية البعد) والمصفوفات متعددة الأبعاد.
تتميز معظم لغات البرمجة بنوع من آلية المكتبة التي تسمح بإعادة استخدام تطبيقات بنية البيانات بواسطة برامج مختلفة. تأتي اللغات الحديثة عادةً مع مكتبات قياسية تقوم بتنفيذ هياكل البيانات الأكثر شيوعًا. الأمثلة هي مكتبة القوالب المعيارية C ++، وإطار عمل مجموعات Java، ومايكروسوفت .NET Framework.
تدعم اللغات الحديثة بشكل عام البرمجة التركيبية، والفصل بين واجهة وحدة المكتبة وتنفيذها. يوفر البعض أنواع بيانات غير شفافة تسمح للعملاء بإخفاء تفاصيل التنفيذ. عادةً ما تستخدم لغات البرمجة الموجهة للكائنات، مثل C ++ وJava وSmalltalk، فئات لهذا الغرض.
العديد من بنى البيانات المعروفة لها إصدارات متزامنة تسمح لخيوط حوسبة متعددة بالوصول إلى مثيل واحد ملموس لهيكل البيانات في وقت واحد.

## مبادئ أساسية

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