الخوارزميات وهياكل البيانات في PHP: من الأساسيات إلى التنفيذ

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

الخوارزميات وهياكل البيانات في PHP: من الأساسيات إلى التنفيذ



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



1. هياكل البيانات الأساسية في PHP



في PHP، تغطي الأنواع المضمنة (المصفوفات، الكائنات) العديد من الاحتياجات، ولكن للفهم العميق والتحسين، من الجيد تنفيذ الهياكل الكلاسيكية يدويًا.



1.1. المكدس (Stack)

يعمل المكدس وفق مبدأ LIFO (Last In, First Out). يُستخدم للتراجع عن الإجراءات (undo)، وتحليل الأقواس، واجتياز الرسوم البيانية بالعمق.

<?phpclass Stack {    private array $items = [];

public function push($item): void { array_push($this->items, $item); }

public function pop() { if ($this->isEmpty()) { throw new UnderflowException('Stack is empty'); } return array_pop($this->items); }

public function peek() { return end($this->items); }

public function isEmpty(): bool { return empty($this->items); }

public function size(): int { return count($this->items); }}

// مثال: التحقق من توازن الأقواسfunction isBalanced(string $expression): bool { $stack = new Stack(); $pairs = ['(' => ')', '{' => '}', '[' => ']'];

for ($i = 0; $i < strlen($expression); $i++) { $char = $expression[$i]; if (isset($pairs[$char])) { $stack->push($char); } elseif (in_array($char, $pairs)) { if ($stack->isEmpty() || $pairs[$stack->pop()] !== $char) { return false; } } } return $stack->isEmpty();}

echo isBalanced("({[]})") ? "متوازن" : "غير متوازن"; // متوازن?>


1.2. الطابور (Queue)

يعمل الطابور وفق مبدأ FIFO (First In, First Out). يُستخدم في أنظمة قوائم المهام، BFS (الاجتياز بالعرض)، وتخزين البيانات مؤقتًا.

<?phpclass Queue {    private array $items = [];

public function enqueue($item): void { $this->items[] = $item; }

public function dequeue() { if ($this->isEmpty()) { throw new UnderflowException('Queue is empty'); } return array_shift($this->items); }

public function peek() { return $this->items[0] ?? null; }

public function isEmpty(): bool { return empty($this->items); }

public function size(): int { return count($this->items); }}

// مثال: محاكاة طابور الطباعة$printQueue = new Queue();$printQueue->enqueue("document1.pdf");$printQueue->enqueue("photo.jpg");$printQueue->enqueue("report.docx");

while (!$printQueue->isEmpty()) { echo "جارٍ الطباعة: " . $printQueue->dequeue() . "";}?>


1.3. شجرة البحث الثنائية (BST)

توفر الشجرة بحثًا سريعًا وإدراجًا وحذفًا للعناصر (O(log n) في المتوسط).

<?phpclass TreeNode {    public $value;    public ?TreeNode $left = null;    public ?TreeNode $right = null;

public function __construct($value) { $this->value = $value; }}

class BinarySearchTree { public ?TreeNode $root = null;

public function insert($value): void { $this->root = $this->insertNode($this->root, $value); }

private function insertNode(?TreeNode $node, $value): TreeNode { if ($node === null) {

المدونات

توصيات الكتب