تخطَّ إلى المحتوى
ARAB CODEمجتمع المطورين العرب

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

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

مقارنة سريعة

الهيكلالوصول بالفهرسالبحثالإضافةالحذف
مصفوفة ديناميكيةO(1)O(n)O(1) مُطفأة في النهايةO(n)
قائمة مترابطةO(n)O(n)O(1) عند عقدة معروفةO(1) عند عقدة معروفة
جدول تجزئة—O(1) متوسطO(1) متوسطO(1) متوسط
شجرة بحث متوازنة—O(log n)O(log n)O(log n)
كومة (heap)—O(n)O(log n)O(log n) للأصغر

المكدس والطابور

  • المكدس (Stack): آخر داخل أول خارج (LIFO). مثل التراجع في المحررات واستدعاءات الدوال.
  • الطابور (Queue): أول داخل أول خارج (FIFO). مثل معالجة المهام بالترتيب.
from collections import deque
stack = []; stack.append(1); stack.pop()
queue = deque(); queue.append(1); queue.popleft()    # O(1) بخلاف list.pop(0)

جداول التجزئة

تربط مفتاحاً بقيمة عبر دالة تجزئة: dict في Python وMap في JavaScript. مثالية للبحث السريع وعدّ التكرارات وإزالة المكررات (set).

الأشجار

  • شجرة البحث الثنائية: كل عقدة أكبر من يسارها وأصغر من يمينها. يجب أن تبقى متوازنة (مثل AVL أو الشجرة الحمراء-السوداء) وإلا تتحول في أسوأ حالة إلى قائمة بتعقيد O(n).
  • الكومة: الأصغر (أو الأكبر) دائماً في القمة؛ أساس طوابير الأولوية (heapq في Python).
  • B-Tree: ما تستخدمه قواعد البيانات للفهارس.

الرسوم البيانية (Graphs)

عقد وحواف، مثل شبكة طرق أو علاقات متابعة. تُمثَّل غالباً بقائمة تجاور:

graph = {"A": ["B", "C"], "B": ["D"], "C": ["D"], "D": []}

كيف تختار؟

اسأل: ما العملية الأكثر تكراراً؟ بحث بالمفتاح ← جدول تجزئة. ترتيب دائم ← شجرة متوازنة. أصغر عنصر دائماً ← كومة. وصول بالفهرس ← مصفوفة.

المصادر

  1. MIT OpenCourseWare 6.006 Introduction to Algorithms
  2. Python docs — Data Structures