هياكل البيانات

إن البيانات التي تُخزن في ذاكرة الوصول العشوائي (RAM) -ولنقل مثلًا أسماء الطلاب-  تُخزن في أوعية تُسمى (Data Structures) أو هياكل البيانات.

إن كلًا من هذه اﻷوعية لديه إيجابيته وسلبياته، سواءً أكان ذلك من ناحية:

1. سرعة الوصول للعنصر الهدف.
2. سهولة الاستخدام (سهولة عملية اﻹضافة والحذف).
3. الاستخدام الفعّال للرام.
4. الديناميكية، والقدرة على التحكم بالحجم خلال وقت التشغيل (Run-time).

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

طبعا ستجد أن معظم أو كل أشكال اﻷوعية (الداتاستركشرز) الثانوية (مثل الـLinked-lists) سوف تستعمل المصفوفة التقليدية  لتمثّل نفسها، لكن حتمًا سيكون أسلوبها مختلفًا في جلب والوصول إلى العناصر والسرعة وإلخ…

فمثلا الـLinked-lists من مزاياها التي تتمتع بها بالمقارنة مع المصفوفة التقليدية، هي سرعة الوصول إلى العنصر المطلوب (ﻷنه العناصر تكون مخزنة في الرام بشكل متناثر وليس بشكل متسلسل).

ومن اﻷنواع اﻷخرى المرصوصات (Stacks) التي بتستعمل مبدأ LIFO (آخر واحد دخل هو أول واحد بطلع) وهذه تستعمل في عملية الـFunction Calls.

وأيضا لدينا الطوابير (QUEUES) التي تتستعمل مبدأ FIFO (أول واحد دخل أول واحد بطلع)، وهذه تستخدم في أولويات العمليات مثل بعض عمليات معالجة الملفات وعمليات الطباعة.

الخوارزميات

الخوارزمية هي حل متسلسل للمشكلة (مجرد خطوات متعاقبة للحل)، فمثلا عندما تريد أن توجد أكبر\أصغر عدد في الـArray Data Structure فسوف يكون هنالك خطوات محددة ﻹجراء هكذا عملية، كالدوران حول عناصر المصفوفة، ومقارنة العنصر كذا مع العنصر كذا، وتلك هالخطوات صار اسمها خوارزمية (أي خطوات الحل).

كيف أتعلم الخوارزميات والداتا ستركشرز؟

هذا واحد من الفيديوهات الجميلة عاليوتيوب لتعلم الداتاستركشر:

وبالنسبة للخوارزميات ستجد موقع Geeks4Geeks مناسبًا جدًا.