WEEK 2 • هياكل البيانات

Array Operations

عمليات المصفوفات

إيه هي الـ Array؟

📦 الفكرة الأساسية

📖 تشبيه الأدراج

تخيل دولاب فيه أدراج متتالية، كل درج:

  • • ليه رقم (Index) بيبدأ من 0
  • • بيشيل قيمة واحدة (Value)
  • • الأدراج ورا بعض في الذاكرة (Contiguous Memory)

⚡ الميزة الكبيرة: Random Access

بما إن العناصر ورا بعض في الذاكرة، الكمبيوتر يقدر يوصل لأي عنصر مباشرة!

// Access element at index 5
arr[5] // O(1) - instant!

💡 السر: عنوان العنصر = عنوان البداية + (index × حجم العنصر)

📊 العمليات الأساسية

Read / Access

O(1) - مباشر!

Search

O(n) - لازم نبحث

Insert

O(n) - لازم نزحلق

Delete

O(n) - لازم نملأ الفراغ

Memory Layout

0x100 0x104 0x108 0x10C 0x110 0x114 [0] 10 [1] 25 [2] 33 [3] 47 [4] 58 [5] 62 ← متتالية في الذاكرة (Contiguous) →

كل خلية بتاخد 4 bytes (لو int)، فالعنوان بيزيد 4 كل مرة

العمليات بالتفصيل

INSERT إضافة عنصر O(n)

📝 الخطوات:

1. حدد مكان الإضافة (index)
2. زحلق كل العناصر من الـ index لآخر المصفوفة خطوة واحدة لليمين
3. حط العنصر الجديد في المكان الفاضي

⚠️ ليه O(n)؟

لو حبيت تضيف في أول المصفوفة، لازم تزحلق كل العناصر!
أسوأ حالة = n عملية زحلقة.

💡 الحالة الأفضل

لو أضفت في آخر المصفوفة = O(1)!
مفيش حاجة تتزحلق.

مثال: إضافة 99 في index 2

Before:

[0]10
[1]25
[2]33
[3]47
↓ Shift elements right ↓

After:

[0]10
[1]25
[2]99
[3]33
[4]47
DELETE حذف عنصر O(n)

📝 الخطوات:

1. حدد مكان العنصر المطلوب حذفه
2. زحلق كل العناصر بعده خطوة واحدة لليسار
3. قلل حجم المصفوفة

💡 نفس المنطق

الحذف من الأول = O(n) (نزحلق كل حاجة)
الحذف من الآخر = O(1) (مفيش زحلقة)

مثال: حذف العنصر في index 1

Before:

[0]10
[1]25
[2]33
[3]47
↓ Shift elements left ↓

After:

[0]10
[1]33
[2]47
SEARCH البحث O(n) / O(log n)

🔍 Linear Search

بندور عنصر عنصر من الأول للآخر

التعقيد: O(n)

✓ بيشتغل على أي array (مترتبة أو لأ)

⚡ Binary Search

بنقسم المصفوفة على نصين كل مرة

التعقيد: O(log n)

⚠️ بيشتغل بس لو الـ array مترتبة!

INTERACTIVE

Try It Yourself!

Enter a value and index, then click an operation.

Logs here.

ملخص التعقيد

العملية Average Worst ملاحظات
Access (القراءة) O(1) O(1) مباشر بالـ index
Search (البحث) O(n) O(n) O(log n) لو مترتبة
Insert (الإضافة) O(n) O(n) O(1) في الآخر
Delete (الحذف) O(n) O(n) O(1) من الآخر