بنية بيانات

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