تراكيب البيانات

Download Report

Transcript تراكيب البيانات

‫قسم علوم الحاسوب و تكنولوجيا المعلومات‬
‫تخصص دبلوم البرمجيات و قواعد البيانات‬
‫تراكيب البيانات‬
‫الوحدة الثانيــة‬
‫المصفوفات أحاديـة و ثنائيــة األبعــاد‬
‫المادة العلمية إعداد‬
‫‪http://mfarra.cst.ps‬‬
‫أ‪ .‬محمود رفيق الفـــرَّ ا‬
‫الفـــرا‬
‫مدرسـا المساق‪ /‬أ‪ .‬محمود رفيق‬
‫َّ‬
‫‪2010-2011‬‬
‫محاور المحاضرة‬
‫‪2‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫المقصود بتراكيب البيانات‬
‫الهدف من تعلم تراكيب البيانات‬
‫طباعة عناصر المصفوفة‬
‫تخزين معلومات في المصفوفـة‬
‫استبدال عناصر في المصفوفات‬
‫حذف عنصر من المصفوفة دون تأثير‬
‫إضافة عنصر دون تأثير‬
‫مفهوم دراسة الخوارزميات‬
‫التعامل مع الـ ‪ArrayList‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫بذكرك ربنـا نحيــا‬
‫‪3‬‬
‫‪‬‬
‫الذكر لمن دخل السوق‬
‫ال إله إال اهلل وحده ال شريك له‪ ،‬له الملك وله الحمدد‬
‫يحيي ويميت وهو حي ال يموت بيده الخير وهو علد‬
‫كل شيء قدير‬
‫عن عمر بن الخطاب رضي هللا عنه أن رسول هللا صلى هللا عليه وسلم قال‪ :‬منن دخنل‬
‫السوق فقال‪ :‬ال إله إال هللا وحده ال شريك لنه لنه الملنك ولنه الحمند يحيني ويمينت وهنو‬
‫حي ال يموت بيده الخير وهو على كل شيء قدير "كتنب هللا لنه ألنف ألنف حسننة ومحنا‬
‫[حسنه األلباني]‬
‫عنه ألف ألف سيئة ورفع له ألف الف درجة‪.‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫المقصود بتراكيب البيانات ؟‬
‫‪4‬‬
‫‪‬‬
‫‪‬‬
‫هي بناء منطقي كبير من عناصر البيانات أو مجموعات منظمة من‬
‫عناصننننر البيانننننات تعامننننل كوحنننندة واحنننندة مثننننل المصننننفوفات أو‬
‫السجالت‪.‬‬
‫تستخدم من أجل تسهيل بناء تطبيقات محددة مثنل تخنزين معلومنات‬
‫طلبنننة أو تخنننزين معلومنننات زبنننائن أو طلبنننات للبينننع و الشنننراء أو‬
‫معالجة لبيانات مستند ما‪ ,‬و غير ذلك‪.‬‬
‫أنواع تراكيب البيانات‬
‫‪5‬‬
‫‪‬‬
‫تنقسم تراكيب البيانات إلى عدة أنواع يناظر كل منها أسلوبا ً خاصا ً‬
‫في تصميم البرامج والمعالجة االلكترونية و هي‪:‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫هياكل بيانات خطية ‪ :‬و فيها يتم تخزين البيانات متجناورة فني النذاكرة‬
‫مثل المصفوفات و المكدسات و السالسل المترابطة و غير ذلك‪.‬‬
‫هياكننل بيانننات شننجرية‪ :‬و فيهننا يننتم تخننزين البيانننات بصننورة تماثننل‬
‫تركيبة األشجار حيث تتجاور معلومنات و تتباعند معلومنات بننا ًء علنى‬
‫بيانات منطقية محددة و مثال ذلك ما يعرف بـ ‪.Tree‬‬
‫هياكننل بيانننات شننبكية‪ :‬و هنني تشننابه الشننجرية إال أن العناصننر هن نا قنند‬
‫ترتبط مع أكثنر منن عنصنر منن المسنتول العلنو و هنو منا يعنرف بنـ‬
‫‪Graph‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫الهدف من تعلم تراكيب البيانات؟‬
‫‪6‬‬
‫‪‬‬
‫‪‬‬
‫علنننم تراكينننب البياننننات هنننو منننن العلنننوم المينننر أساسينننـة فننني عنننالم‬
‫البرمجـة‪ ,‬بمعنى يمكنك تطوير البرمجيات دون الحاجة له‪ ,‬و لكن!!‬
‫ظهرت الحاجة لعلم تراكيب البيانات بهدف زيادة جنودة البرمجينات‬
‫من حيث سرعة التنفيذ‪ ,‬و تقليل كمية الذاكرة المستخدمة‪.‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫التعامل مع عناصر المصفوفة؟‬
‫‪7‬‬
‫‪‬‬
‫بما أنَّ المصفوفة سوا ًء األحاديـة أو الثنائيـة تعتبر مجموعة من‬
‫العناصر (المتميرات) المتجاورة يزيد عنوان الواحدة عن التي قبلها‬
‫بعدد ثابت هو ‪ 1‬فإن التعامل مع هذه العناصر سيكون سهال من‬
‫خالل استخدام التكرارات للوصول للعناصر ثم القيام بالعملية التي‬
‫نرغب في القيام بها سواء طباعة‪ ,‬تخزين‪ ,‬بحث‪ ,‬ترتيب‪ ,‬حذف و‬
‫غير ذلك‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫طباعة عناصر المصفوفة؟‬
8
1. static void Main(string[] args)
2.
{
3.
string[] names = { "Ali", "Mahmoud", "Hussam", "Ala" };
4.
for (int i = 0; i < names.Length; i++)
5.
Console.WriteLine("The next name is "+names[i]);
6.
Console.Read();
7.
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫طباعة عناصر المصفوفة؟‬
‫‪9‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫من الطرق األخرل لتعريف المصفوفة –عند معرفة عناصر سلفا‪-‬‬
‫كما يلي‪ string[] names = { "Ali", "Mahmoud", "Hussam", "Ala" }; :‬و في‬
‫هذه الحالة يتعرف المترجم على عدد عناصر المصفوفة بشكل‬
‫ضمني‪.‬‬
‫من الدوال التي يكثر استخدامها للتعامل مع المصفوفات دالة‬
‫‪ length‬و هي تستخدم إلعادة عدد عناصر المصفوفة‪.‬‬
‫يستخدم االمر ‪ Console.WriteLine‬للطباعة كما تشاهد في السطر‬
‫‪ 5‬بينما االمر ‪ Console.Read‬للقراءة‪.‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫طباعة عناصر المصفوفة‬
10
1.
2.
3.
4.
5.
6.
7.
static void Main(string[] args)
{
string[,] names = { {"Ali", "Mahmoud"}, {"Hussam", "Ala"} };
for (int i = 0; i < names.GetLength(0); i++)
Console.WriteLine("The next name is " + names[i,0]+" “ + names[i,1]);
Console.Read();
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫طباعة عناصر المصفوفة‬
‫‪11‬‬
‫‪‬‬
‫‪‬‬
‫من الطرق األخرل لتعريف المصفوفة ذات البعدين كما يلي تشاهد‬
‫في السطر الثالث‪.‬‬
‫من الدوال التي يكثر استخدامها للتعامل مع المصفوفات ذات‬
‫البعدين دالة )‪ GetLength(0‬و هي تستخدم إلعادة عدد عناصر‬
‫المصفوفة في الصف الواحد‪ ,‬بينما عند استبدال القيمة ‪ 0‬بالقيمة ‪1‬‬
‫فإنها ستعيد عدد العناصر في العمود‪.‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫تخزين معلومات في مصفوفـة أحاديـة‬
‫‪12‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫تخزين المعلومات داخل المصفوفات في عموم التطبيقات يتم بشكل‬
‫آلي‪ ,‬و ذلك لمعلومات يتلقاها التطبيق إما من المستخدم و إما من‬
‫مصدر خارجي (قاعدة بيانات‪ ,‬ملفات معلوماتية)‪.‬‬
‫لهذا فأنت دائما بحاجة إلى تقدير حجم المصفوفة التي تحتاجها‪,‬‬
‫معرفة نوع البيانات‪ ,‬و تحتاج كذلك إلى تخزين البيانات بصورة‬
‫صحيحة و ترتيب صحيح‪.‬‬
‫لهذا نحن بحاجة إلى استخدام جملة تكرار باإلضافة إلى جملة قراءة‬
‫القيم‪.‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫تخزين معلومات في مصفوفـة أحاديـة‬
13
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
static void Main(string[] args)
{
int[] id = new int[5];
for (int i = 0; i < 5; i++)
id[i] =int.Parse(Console.ReadLine());
Console.WriteLine("==== The numbers in Array are =====");
for (int i = 0; i < 5; i++)
Console.WriteLine(" Next Number is " + id[i]);
Console.ReadLine();
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫تخزين معلومات في مصفوفـة أحاديـة‬
‫‪14‬‬
‫‪‬‬
‫‪‬‬
‫من المعروف سلفا أن القيم التي يتم إدخالها من خالل جمل اإلدخال‬
‫يعتبرها المترجم من النوع نص ‪ string‬و لكي نخزنها في مصفوفة‬
‫من النوع الصحيح نحتاج إلى تحويل النوع و هو ما يمكن فعله من‬
‫خالل الدالة ‪ Parse‬كما هو واضح في السطر الخامس‪.‬‬
‫الكود بد ًء من السطر السادس ال يعتبر لتخزين القيم و إنما لطباعة‬
‫القيم التي تم إدخالها‪.‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫تخزين معلومات في مصفوفـة ثنائيـة‬
‫‪15‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫تخزين المعلومات داخل المصفوفات في عموم التطبيقات يتم بشكل‬
‫آلي‪ ,‬و ذلك لمعلومات يتلقاها التطبيق إما من المستخدم و إما من‬
‫مصدر خارجي (قاعدة بيانات‪ ,‬ملفات معلوماتية)‪.‬‬
‫لهذا فأنت دائما بحاجة إلى تقدير حجم المصفوفة التي تحتاجها‪,‬‬
‫معرفة نوع البيانات‪ ,‬و تحتاج كذلك إلى تخزين البيانات بصورة‬
‫صحيحة و ترتيب صحيح‪.‬‬
‫لهذا نحن بحاجة إلى استخدام جملة تكرار باإلضافة إلى جملة قراءة‬
‫القيم‪.‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫تخزين معلومات في مصفوفـة ثنائيـة‬
16
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
static void Main(string[] args)
{
string[,] names = new string[2, 3];
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
names[i, j] = Console.ReadLine();
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
Console.Write(names[i, j]);
Console.WriteLine();
}
Console.Read();
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫تخزين معلومات في مصفوفـة ثنائيـة‬
‫‪17‬‬
‫‪‬‬
‫‪‬‬
‫من خالل المثال السابق قمنا بتخزين االسم الثالثي لشخصين‪ ,‬و‬
‫لهذا كانت المصفوفة تحتو على صفين (للشخصين) و ثالثة‬
‫أعمدة (كل عمود يحتو على جزء من االسم الثالثي)‪.‬‬
‫و طالما كنا نمتلك تكرار أفقي (األعمدة) و عمود (الصفوف)‬
‫فنحن نحتاج لتكرارين كل واحد منهما يعالج اتجاه‪.‬‬
‫مستخدما جمل الطباعة قم بالتعديل على المثال السابق بحيث ترشد المستخدم إلدخال األسماء على الشكل‬
‫التالي‬
‫أدخل الجزء ‪ 1‬من اسم الشخص األول‬
‫أدخل الجزء ‪ 2‬من اسم الشخص األول‬
‫أدخل االسم الثالث للشخص األول‬
‫و هكذا ‪...‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫استبدال عناصر في المصفوفات‬
‫‪18‬‬
‫‪‬‬
‫‪‬‬
‫من العمليات المشهورة في البرمجة استبدال قيم العناصر و هو ما‬
‫يعرف باسم ‪ ,swap‬حيث نقوم باستبدال قيم العنصر الثالث مع‬
‫الخامس مثال‬
‫و للقيام بهذه المهمة نحتاج إلى استحداث متمير كـ (مخزن مؤقت)‬
‫يتم فيه تخزين قيمة أحد المتميرين‪.‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫استبدال عناصر في المصفوفات‬
19
1. static void Main(string[] args)
2.
{
3.
int[] numbers = { 3, 5, 7, 23, 56, 12 };
4.
int x;
5.
x = numbers[0];
6.
numbers[0] = numbers[1];
7.
numbers[1] = x;
8.
Console.WriteLine(" ");
9.
Console.WriteLine(" The elements of array after swap");
10.
for (int i = 0; i < numbers.Length; i++)
11.
Console.WriteLine(" "+numbers[i]);
12.
Console.Read();
13.
}
‫قم بتطبيق هذا المفهوم مع مصفوفة ثنائيـة األبعاد مخزن بها االسماء‬
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫بذكرك ربنـا نحيــا‬
‫‪20‬‬
‫‪‬‬
‫الذكر لمن ركب الدابـة‬
‫اهلل أكب د ددر ‪ ...‬اهلل أكب د ددر ‪ ...‬اهلل أكب د ددر ‪ ...‬س د ددبح اهلل ‪...‬‬
‫سبح اهلل ‪ ...‬سبح اهلل ‪ ...‬سدبح الد س سدخر لند هد ا‬
‫و م كند له موقنين و إن إل ربن لمنقلبو‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫حذف عنصر من المصفوفة دون تأثير‬
‫‪21‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫حننذف العنصننر مننن المصننفوفة ال يعننني اسننتبداله بالقيمننة صننفر !! بننل‬
‫يقصد به إزالة وجوده و الحفاظ على بقية العناصر‪.‬‬
‫هذا يعني أننا نحتاج إلى كتابة قيمة على القيمة المراد حذفها‪.‬‬
‫حذف العنصر قد يتم بطريقين هما‪/‬‬
‫‪.1‬‬
‫‪.2‬‬
‫طلب حذف عنصر بالقيمة (مثال‪ :‬حذف العنصر ذو القيمة ‪)10‬‬
‫طلب حذف عنصر بالعنوان(مثال‪ :‬حذف العنصر الثالث)‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫حذف عنصر من المصفوفة دون تأثير‬
‫‪22‬‬
‫‪9‬‬
‫‪10 11 12 13 14‬‬
‫‪7‬‬
‫‪8‬‬
‫‪5‬‬
‫‪6‬‬
‫‪4‬‬
‫‪3‬‬
‫‪12 15 23 30 45 70 77 80 88 90 99‬‬
‫‪9‬‬
‫‪9‬‬
‫‪8‬‬
‫‪7‬‬
‫‪10 11 12 13 14‬‬
‫‪5‬‬
‫‪6‬‬
‫‪9‬‬
‫‪4‬‬
‫‪8‬‬
‫‪3‬‬
‫‪7‬‬
‫‪6‬‬
‫‪9‬‬
‫‪7‬‬
‫‪2‬‬
‫‪array‬‬
‫‪To delete the 5’th cell‬‬
‫‪15‬‬
‫‪2‬‬
‫‪2‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪5‬‬
‫‪3 4‬‬
‫‪12 15 23 30 45 15 77 80 88 90 99‬‬
‫‪2‬‬
‫‪9‬‬
‫‪1‬‬
‫‪0‬‬
‫‪7‬‬
‫‪2‬‬
‫‪array‬‬
‫‪Null‬‬
‫‪10 11 12 13 14‬‬
‫‪9‬‬
‫‪8‬‬
‫‪7‬‬
‫‪6‬‬
‫‪5‬‬
‫‪4‬‬
‫‪23 30 45 15 77 80 88 90 99 99‬‬
‫مساق تراكيب البيانات‬
‫‪3‬‬
‫‪12‬‬
‫‪2‬‬
‫‪9‬‬
‫‪1‬‬
‫‪0‬‬
‫‪7‬‬
‫‪2‬‬
‫‪array‬‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫حذف عنصر من المصفوفة دون تأثير‬
23
1. static void Main(string[] args)
2.
{
3.
int[] id = { 10, 12, 11, 45 };
4.
// to delete the value 12
5.
int i;
6.
for ( i = 0; i < id.Length-1; i++)
7.
{
8.
if (id[i] == 12)
9.
{
10.
break;
11.
} }
12.
for (int j =i ; j < id.Length-1; j++)
13.
id[j] = id[j + 1];
14.
for (int k = 0; k < id.Length; k++)
15.
Console.WriteLine(" "+id[k]);
16.
Console.Read();
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫حذف عنصر من المصفوفة دون تأثير‬
24
1. static void Main(string[] args)
2.
{
3.
int[] id = { 10, 12, 11, 45 };
4.
// to delete the value of index 2
5.
for (int i =2 ; i < id.Length-1; i++)
6.
id[i] = id[i + 1];
7.
for (int k = 0; k < id.Length; k++)
8.
Console.WriteLine(" "+id[k]);
9.
Console.Read();
10.
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫إضافة عنصر دون تأثير‬
‫‪25‬‬
‫‪‬‬
‫‪‬‬
‫نقصنند بإضننافة عنصننر داخننل المصننفوفة دون تننأثير‪ ,‬أ يننتم إضننافة العنصننر فنني‬
‫موضع محدد دون حذف القيمة الموجودة في ذلنك الموضنع أو دون تميينر ترتينب‬
‫المصفوفة إن كانت مرتبـة‪.‬‬
‫و إلضافة عنصر جديد داخل المصفوفة نحتاج إلى‪:‬‬
‫‪‬‬
‫‪‬‬
‫تحديد عنوان الموضع الذ نرغب في إضافة العنصر فيه‪.‬‬
‫عمننل إزاحننة للقيمننة الموجننودة سننلفا فنني ذلننك الموضننع فنني اتجنناه اليمننين إلفننرا موضنع‬
‫فار ‪.‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫إضافة عنصر دون تأثير‬
‫‪26‬‬
‫‪10 11 12 13 14‬‬
‫‪9‬‬
‫‪8‬‬
‫‪7‬‬
‫‪6‬‬
‫‪5‬‬
‫‪4‬‬
‫‪2‬‬
‫‪3‬‬
‫‪12 15 23 30 45 70 77 80 88 90 99‬‬
‫‪10 11 12 13 14‬‬
‫‪9‬‬
‫‪8‬‬
‫‪7‬‬
‫‪6‬‬
‫‪7‬‬
‫‪2‬‬
‫‪array‬‬
‫‪To insert value‬‬
‫‪13‬‬
‫‪5‬‬
‫‪9‬‬
‫‪1‬‬
‫‪0‬‬
‫‪4‬‬
‫‪13 15 23 30 45 70 77 80 88 90 99‬‬
‫‪3‬‬
‫‪12‬‬
‫‪2‬‬
‫‪9‬‬
‫‪1‬‬
‫‪0‬‬
‫‪7‬‬
‫‪2‬‬
‫‪array‬‬
‫الشكل العلو يوضح طريقة إضافة عنصر في مصفوفة مرتبـة العناصر حسب القيمة بشكل تصاعد‬
‫إضافة عنصر في مصفوفة غير مرتبـة دون تأثير‬
27
1. static void Main(string[] args)
2.
{
3.
int[] salary = new int [6];
4.
salary[0] = 1200;
5.
salary[1] = 2000;
6.
salary[2] = 1000;
7.
salary[3] = 3210;
8.
salary[4] = 4310;
9.
// to add value 3000 in the position 3
10.
for (int i = salary.Length - 1; i >= 3; i--)
11.
salary[i] = salary[i - 1];
12.
salary[3] = 3000;
13.
Console.WriteLine(" === Values of Array after inserting === ");
14.
for (int j = 0; j < salary.Length; j++)
15.
Console.WriteLine(" Value: "+salary[j]);
16.
Console.Read();
‫مساق تراكيب البيانات‬
17. ‫محمود رفيق الفــرَّ ا‬
} .‫ أ‬/‫المادة العلمية إعداد‬
‫إضافة عنصر في مصفوفة مرتبـة دون تأثير‬
1. static void Main(string[] args)
{
2.
int[] salary = new int[6];
283.
salary[0] = 100;
4.
salary[1] = 200;
5.
salary[2] = 300;
6.
salary[3] = 1210;
7.
salary[4] = 2310;
8.
// To add value 250
9.
int i;
‫ قدددم‬: ‫تددددريب ذاتدددي‬
‫بالتعددددددددددديل علددددددددددى‬
10.
for (i = 0; i < salary.Length; i++)
‫البرندددامي فدددي حدددال‬
11.
if (salary[i] > 250)
‫كانددت كافددة عنا ددر‬
12.
break;
‫الم دددددفوفة أ ددددد ر‬
13.
for (int j = salary.Length - 1; j >= i; j--)
‫مدددن الةيمدددة المدددراد‬
14.
salary[j] = salary[j - 1];
‫إدخالها‬
15.
salary[i] = 250;
16.
Console.WriteLine(" ");
17.
Console.WriteLine(" === Values of Array after inserting === ");
18.
for (int j = 0; j < salary.Length; j++)
19.
Console.WriteLine(" Value: " + salary[j]);
.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
20. ‫ محمود رفيق الفــرَّ ا‬Console.Read();
}
‫مفهوم دراسـة الخوارزميات‬
‫‪29‬‬
‫‪‬‬
‫يقصد بمفهوم دراسة الخوارزميات هو دراسـة ما تحتاجه هذه الخوارزمينات منن‬
‫وقت و مساحة تخزين للوصول للحنل‪ ,‬و يعنرف هنذا العلنم باسنم ‪Complexity of‬‬
‫‪Algorithms‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫الوقت (يعتمد على عدد خطوات)‬
‫مساحة تخزين (يعتمد على عدد المعلومات التي نحتاج لتخزينها في الذاكرة العشوائية)‬
‫فمثـال‪ :‬إذا أردننا تخنزين عنصنر جديند فني المصنفوفة‪ ,‬فننحن هننا نحتناج لحسناب‬
‫عدد العناصر التي نحتناج لتحريكهنا باإلضنافة لعملينة التخنزين‪ ,‬لنحسنب الوقنت و‬
‫المساحة‪.‬‬
‫)‪exp (n‬‬
‫و هننناك مقننادير عامننة لمنندل تعقينند الوقننت‬
‫المستخدم‪ ,‬و هي موضحة بالشكل المقابل‪.‬‬
‫‪n‬‬
‫‪log n‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫مفهوم دراسـة الخوارزميات‬
‫‪30‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫و يعرف ‪ Time complexity‬بأنه الوقت الالزم لتنفينذ البرننامج (الخوارزمينة)‬
‫مقارنة بعدد المدخالت (مثال عدد عناصر المصفوفة)‪.‬‬
‫و يعننرف ‪ Space complexity‬بأنهننا مسنناحة التخننزين الالزمننة لتنفيننذ البرنننامج‬
‫مقارنة بعدد المدخالت‪.‬‬
‫و طالما أنها مرتبطـة بالمدخالت‪ ,‬فستجد أنَّ درجنة تعقيند الخوارزمينـة تقناس بمنا‬
‫يعنرف بنـ )‪ O(n‬أو ‪ Big o notation‬علمنا بنأنَّ ‪ n‬هننا يقصند بهنا عندد منرات‬
‫المعالجة أو التخزين‪ ,‬و كلما قلة قيمنة ‪ n‬كلمنا كاننت هنذه الخوارزمينـة أفضنل منن‬
‫حيث الوقت و التخزين‪.‬‬
‫)‪exp (n‬‬
‫هذا المفهوم من العلدوم التدي يدتم دراسدتها بعنايدة‬
‫دي علدوم الحاسدوب و محللدي‬
‫شديدة مدن متخ‬
‫الدددن م‪ ,‬ألن نتيجتهدددا قدددد تجعلهدددم يعتمددددون علدددى‬
‫خوارزميـة دون أخرى‬
‫مساق تراكيب البيانات‬
‫‪n‬‬
‫‪log n‬‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫مفهوم الـ ‪ArrayList‬‬
‫‪31‬‬
‫‪‬‬
‫‪‬‬
‫الشنننك أننننك انتبهنننت خنننالل تعاملننننا منننع المصفوفنننـة فننني إصننندارها‬
‫التقليد أنَّ حجمها ثابت و ال يمكن زيادته خالل عمنل البرننامج‪ ,‬و‬
‫هذا األمر جعلها غير مناسبة لكثير من البرامج‪.‬‬
‫منن الحلنول لهنذه المشننكلة اسنتخدام منا يعنرف ‪Dynamic Data‬‬
‫‪ Structure‬حيث الحجم يمكن زيادته خالل تنفيذ النظام‪ ,‬و من هنذه‬
‫التراكيب‪:‬‬
‫‪Stack‬‬
‫‪ Queue‬‬
‫‪ Array List‬‬
‫‪‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫مفهوم الـ ‪ArrayList‬‬
‫‪32‬‬
‫‪‬‬
‫‪‬‬
‫و تعتمد الـ ‪ ArrayList‬على حجنم مبندئي قندره ‪ 4‬عناصنر‪ ,‬بمجنرد‬
‫الوصول له يتم تلقنائي إضنافة ‪ 4‬عناصنر جديندة و هكنذا‪ ,‬و بالتنالي‬
‫فال وجود لخطأ انتهاء الحجم‪ ( ,‬يمكننا طلب عدد أكبر منن الخاننات‬
‫من بداية العمل)‪.‬‬
‫تعتبر الـ ‪ ArrayList‬من تراكيب البيانات المبنيـة سلفـا في لمة سني‬
‫شارب‪ ,‬و لكي يمكننا التعامل معها نحتاج لتضمين المكتبـة ‪Collections‬‬
‫;‪using System.Collections‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫مفهوم الـ ‪ArrayList‬‬
‫‪33‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫و يتم تعريف مصفوفة اسمها ‪ names‬من هذا النوع كما يلي‪:‬‬
‫;)(‪ArrayList names = new ArrayList‬‬
‫كما تالحظ في تعريف الـ ‪ ArrayList‬لم نحندد عندد العناصنر‪ ,‬و لنم‬
‫نستخدم ] [ و ذلك ألنه يعتبر صنف معرف سلفا ‪Predefined class‬‬
‫و بالتالي فتعريف أ مصفوفة من هذا الننوع ينتم كأننك تشنتق كنائن‬
‫من صنف‪.‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫مفهوم الـ ‪ArrayList‬‬
‫‪34‬‬
‫‪‬‬
‫و يمتلننك صنننف ‪ ArrayList‬مجموعننة مننن النندوال التنني يمكنننك مننن‬
‫خاللها التعامل مع عناصر المصفوفة‪ ,‬بعضها موضح فيما يلي‪.‬‬
‫الدالة‬
‫)(‪Add‬‬
‫)(‪AddRange‬‬
‫)(‪Clear‬‬
‫و يفتها‬
‫من خاللها يتم إضافة عناصر للمصفوفة في نهايتها‪.‬‬
‫يتم من خاللها إضافة مصفوفة لمصفوفـة أخرل من النوع ‪ ArrayList‬و تضاف‬
‫العناصر في نهاية المصفوفة المضاف لها‪.‬‬
‫تسمح بحذف كافة العناصر الموجودة داخل المصفوفة‬
‫)(‪Contains‬‬
‫دالة تستخدم لفحص وجود عنصر في المصفوفة من عدمه و هي بالتالي تعيد القيمة‬
‫الشرطيـة (‪)T, F‬‬
‫)(‪CopyTo‬‬
‫دالة تمكنك من نسخ عدد من عناصر مصفوفة ‪ ArrayList‬إلى مصفوفة أخرل‬
‫)(‪Insert‬‬
‫تسمح لك بإدراج عنصر ما في موضع محدد داخل المصفوفة و ليس شرطــا في‬
‫نهايتها‬
‫مستخدما خدمة البحث عبر اإلنترنت ‪ ,‬ابحث عن مزيد من الدوال مع مفهوم كل منها‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
ArrayList ‫مفهوم الـ‬
35
1. static void Main(string[] args)
2.
{
3.
ArrayList names = new ArrayList();
4.
int po1 = names.Add("Ali");
‫متمير ُم َعرَّ ف سلفا داخل‬
5.
int po2 = names.Add("hussam");
‫الصنف و يعيد عدد العناصر‬
6.
int po3 = names.Add("hassan");
‫التي تحتويها المصفوفة‬
7.
int po4 = names.Add("Alaa");
8.
int po5 = names.Add("wael");
9.
Console.WriteLine();
10.
Console.WriteLine(" Position of PO1: " + po1 +
11.
" Position of PO2: " + po2 + " Position of PO5: " + po5);
12.
Console.WriteLine(" number of names in the ArrayList: " + names.Count);
13.
Console.ReadLine();
14.
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
ArrayList ‫مفهوم الـ‬
36
1. static void Main(string[] args)
2.
{
3.
ArrayList list1 = new ArrayList();
4.
list1.Add(40);
5.
list1.Add(50);
6.
list1.Add(60);
7.
list1.Add(70);
8.
ArrayList list2 = new ArrayList();
9.
list2.Add(80);
10.
list2.Add(90);
11.
list1.AddRange(list2);
12.
Console.WriteLine(" === The elements of list1 are ===");
13.
foreach (object x in list1)
14.
Console.WriteLine(" "+x);
15.
Console.ReadLine();
16.
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
ArrayList ‫مفهوم الـ‬
37
1. static void Main(string[] args)
2.
{
3.
ArrayList list1 = new ArrayList();
4.
list1.Add(40);
5.
list1.Add(50);
6.
list1.Add(60);
7.
list1.Add(70);
8.
ArrayList list2 = new ArrayList();
9.
list2 = list1.GetRange(0, 3);
10.
Console.WriteLine();
11.
foreach (object x in list2)
12.
Console.WriteLine(" "+x);
13.
Console.ReadLine();
14.
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫ تددددم‬GetRange ‫مددددن خددددةل الدالددددة‬
‫استةطاع ثةثة عنا ر من الم دفوفة‬
‫ بدايددددددة مددددددن الع ددددددر‬list1 ‫األولددددددى‬
‫الموجود في الموضع فر و تخزينها‬
.list2 ‫في الم فوفة‬
‫مساق تراكيب البيانات‬
ArrayList ‫مفهوم الـ‬
38
1. static void Main(string[] args)
2.
{
3.
ArrayList list1 = new ArrayList();
4.
list1.Add(40);
5.
list1.Add(30);
6.
list1.Add(10);
7.
list1.Add(100);
8.
list1.Sort();
9.
Console.WriteLine();
10.
foreach (object x in list1)
11.
Console.WriteLine(" " + x);
12.
Console.ReadLine();
13.
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫أشكركم‬
‫‪39‬‬
‫السؤال مفتاح للعلوم كلها‪...‬‬
‫تذكر أن نيوتن عندما سأل لماذا وقعت التفاحـة وصل إلى قوانين الجاذبيــة ‪...‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬