Arrays And Strings in DSA

إليك المقالة بعد تنسيقها باللغة العربية بشكل احترافي ومنسق لتكون سهلة الفهم ومناسبة للنشر أو الحفظ في GitHub:
📌 المصفوفات (Arrays) والسلاسل النصية (Strings) في عالم هياكل البيانات والخوارزميات (DSA)
في مجال هياكل البيانات والخوارزميات (DSA)،
تُعتبر المصفوفات (Arrays) والسلاسل النصية (Strings) من أهم الأدوات التي يعتمد عليها المبرمجون في حل المشاكل البرمجية.
في هذا المقال، سنتعرف عليهما بالتفصيل، ونناقش أهميتهما، ونرى كيفية التعامل معهما من خلال أمثلة عملية باستخدام Python و PHP.
📌 أولًا: المصفوفات (Arrays)
🔹 ما هي المصفوفة؟
المصفوفة (Array) هي هيكل بيانات (Data Structure) يُستخدم لتخزين مجموعة من العناصر من نفس النوع (مثل الأرقام أو الحروف) في مكان واحد في الذاكرة، حيث يتم تخزين كل عنصر في موقع محدد (Index) يبدأ عادةً من 0.
🎯 مثال توضيحي:
إذا كان لدينا المصفوفة التالية:
numbers = [5, 10, 15]
فإن العنصر 10 موجود عند المؤشر 1، ويمكن الوصول إليه باستخدام:
print(numbers[1]) # النتيجة: 10
✅ مميزات المصفوفات (Arrays)
الوصول السريع لأي عنصر إذا كان المؤشر (Index) معروفًا ⏩
O(1)
.سهولة التخزين والاستخدام مقارنةً ببعض الهياكل الأخرى.
استهلاك أقل للذاكرة مقارنةً بهياكل البيانات الديناميكية.
❌ عيوب المصفوفات (Arrays)
الحجم ثابت في بعض اللغات مثل PHP (يجب تحديد الحجم مسبقًا).
الإضافة أو الحذف داخل المصفوفة بطيء ⏳
O(n)
لأن العناصر تحتاج إلى إعادة ترتيب.
🔹 أمثلة عملية على المصفوفات في Python و PHP
📌 مثال في Python 🐍
# تعريف مصفوفة
numbers = [5, 10, 15]
print(numbers[1]) # طباعة العنصر الثاني (10)
# عكس المصفوفة (Reverse)
numbers.reverse()
print(numbers) # [15, 10, 5]
📌 مثال في PHP 🐘
<?php
// تعريف مصفوفة
$numbers = [5, 10, 15];
echo $numbers[1]; // طباعة العنصر الثاني (10)
// عكس المصفوفة
$numbers = array_reverse($numbers);
print_r($numbers); // Array ( [0] => 15 [1] => 10 [2] => 5 )
?>
📌 ثانيًا: السلاسل النصية (Strings)
🔹 ما هي السلاسل النصية؟
السلاسل النصية (Strings) هي عبارة عن مصفوفة من الحروف
(Characters)، أي أن الكلمة "Hello"
هي في الحقيقة:
['H', 'e', 'l', 'l', 'o']
حيث يمكن الوصول إلى أي حرف باستخدام المؤشر (Index)، مثل المصفوفات تمامًا.
✅ مميزات السلاسل النصية (Strings)
مرونة كبيرة في التعامل مع النصوص (قص، تعديل، بحث...).
دعم عمليات مثل الدمج (Concatenation) واقتطاع جزء منها (Substring).
مفيدة جدًا في التعامل مع البيانات النصية والمقابلات البرمجية.
❌ عيوب السلاسل النصية (Strings)
إذا كانت السلسلة النصية طويلة، فإن بعض العمليات مثل البحث أو التعديل تكون بطيئة
(
O(n)
).في بعض اللغات مثل Python و PHP،
أي تعديل على النصوص يؤدي إلى إنشاء نسخة جديدة منها، مما يستهلك الذاكرة.
🔹 أمثلة عملية على السلاسل النصية في Python و PHP
📌 مثال في Python 🐍
# تعريف سلسلة نصية
text = "Hello"
print(text[1]) # طباعة الحرف الثاني (e)
# فحص إذا كانت السلسلة Palindrome (كلمة تُقرأ بنفس الطريقة من الجهتين)
def is_palindrome(s):
return s == s[::-1]
print(is_palindrome("radar")) # النتيجة: True
📌 مثال في PHP 🐘
<?php
// تعريف سلسلة نصية
$text = "Hello";
echo $text[1]; // طباعة الحرف الثاني (e)
// فحص إذا كانت Palindrome
function is_palindrome($s) {
return $s === strrev($s);
}
echo is_palindrome("radar"); // 1 (True)
?>
📌 العلاقة بين المصفوفات (Arrays) والسلاسل النصية (Strings)
السلاسل النصية هي في الأساس مصفوفة من الحروف، ولكن الفرق الرئيسي هو طريقة التعامل معها.
المصفوفات يمكن أن تحتوي على أي نوع من البيانات (أرقام، كائنات... إلخ)، بينما السلاسل النصية مخصصة فقط للحروف والنصوص.
🎯 مثال يوضح العلاقة بينهما:
text = "Python"
print(list(text)) # تحويل النص إلى مصفوفة ['P', 'y', 't', 'h', 'o', 'n']
📌 نصائح للمبرمجين في تعلم المصفوفات والسلاسل النصية
🔹 ابدأ بالمصفوفات أولًا! لأنها تعتبر الأساس الذي تعتمد عليه معظم هياكل البيانات الأخرى.
🔹 السلاسل النصية مهمة جدًا في المقابلات التقنية! لأنها تظهر في كثير من التحديات البرمجية مثل Reverse String و Palindrome و Substring Search.
🔹 حاول دائمًا تحسين الحلول الخاصة بك! مثل استخدام HashMap
للبحث السريع داخل النصوص بدلًا من O(n²)
.
🎯 ملخص المقال
المفهوم | Arrays (المصفوفات) | Strings (السلاسل النصية) |
التخزين | مجموعة من العناصر بنفس النوع | مجموعة من الحروف (Characters) |
الوصول إلى عنصر معين | O(1) سريع جدًا | O(1) سريع جدًا |
إضافة أو حذف عنصر | O(n) (بطيء إذا كان في المنتصف) | O(n) (لأن التعديل ينشئ نسخة جديدة) |
دعم العمليات المختلفة | يمكن الفرز، العكس، البحث... | يدعم القص، البحث، الدمج، الانعكاس... |
أمثلة على الاستخدام | تخزين بيانات متعددة مثل الأرقام، القوائم، الكائنات... | التعامل مع النصوص والبيانات النصية |
Subscribe to my newsletter
Read articles from Salma directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by