1 / 39

تركيب البيانات وتصميم الخوارزميات 1289

خوارزميات الاضافة في القوائم المتصلة. تركيب البيانات وتصميم الخوارزميات 1289. إعداد أ. سليم الجيوسي/سلفيت. تستخدم القوائم المتصلة في عملية تمثيل القوائم وتكون على هيئة سلسلة من العناصر مرتبطة مع بعضها البعض. اهم العناصر التي لا بد من معرفتها لأنها تشكل المكون الاساسي للقوائم المتصلة.

devin
Download Presentation

تركيب البيانات وتصميم الخوارزميات 1289

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. خوارزميات الاضافة في القوائم المتصلة تركيب البيانات وتصميم الخوارزميات 1289 إعداد أ. سليم الجيوسي/سلفيت

  2. تستخدم القوائم المتصلة في عملية تمثيل القوائموتكون على هيئة سلسلة من العناصر مرتبطة مع بعضها البعض

  3. اهم العناصر التي لا بد من معرفتها لأنها تشكل المكون الاساسي للقوائم المتصلة

  4. 5 . المعلومة بداخل عنصر القائمه ويشار اليها: info الرابطة التي تصل العناصر بعضها ببعض ويشار اليها باسم link والمثال التالي يوضح ذلك A

  5. يتضح من الشكل السابق ان اسم العنصر هو A • وان المعلومة بداخله هي 5 ويتم الاشارة الى ذلك كما يلي: • A->info =5 • اما الرابط فيشار اليه: • A->link العنصر الذي يليه =

  6. 7. 11 7. • من خلال الشكل الثاني يمكن التعرف على عناصر القائمة المتصلة كما يلي: • XY Z NULL شكل(2)

  7. X->info=7 X->link=y NULL اكمل ما يلي: Y->info=…….. Y->link=…….. Z->info=…….. Z->link=………

  8. عملية زيادة المؤشر في القوائم المتصلة: • تستخدم عملية الزيادة في لغات البرمجة لعدة اهداف وابسط مثال على عمليات الزيادة • هي مثلا i++

  9. اما في القوائم المتصلة فتهدف الزيادة الى تحريك المؤشر على احد العناصر ليشير الى العنصر الذي يليه ويتم ذلك باستخدام الصيغة التاليه إسم المؤشر=اسم المؤشر->link

  10. مثال على عملية تحريك المؤشر في القوائم المتصلة: قم بتحريك المؤشر current الذي يشير الى العنصر الاول وارسم الشكل في كل مرة current 100 200 300 null

  11. الحل: currentتشير في البداية للعنصر 100 ولذلك فان: Current->info=100 وعملية الزيادة الاولى Current=current->link ليشير current للمعلومة 200 بعد تنفيذ هذا الامر يتحرك مؤشر

  12. current 100 200 300 null لذلك فانه Current->info=200 عملية الزيادة الثانيه Current=current->link

  13. وبعد تنفيذ هذا الامر يتحرك المؤشر current ليشير للمعلومة 300 current 300 200 100 null لذلك فان: Current->info=300

  14. كيف يمكن نقل المؤشر خطوتين للأمام مره واحده؟ لا بد من الاشارة هنا الى ان بداية القائمة المتصلة لها مؤشرها الدائم والخاص هو : list كما في الشكل التالي list 500 600

  15. ومن هنا فإن: List تشير الى المعلومة 500 List->info=500 وبالرجوع الى الموضوع السابق فان عملية تقدم بداية القائمة تكون كما يلي: List=list->link لتشير لذلك الى العنصر التالي فيصبح هو عنصر بداية القائمة

  16. أما نهاية القائمة: فمن الواجب أن يشير العنصر في النهاية الى null كما يلي: null

  17. تدريب: ما رأيك في العبارة التالية هل هي صحيحة ام خطأ؟ بناءا على الشكل السابق: List->link->link->link=??NULL

  18. اضافة العناصر الى القوائم المتصلة: • هنالك ثلاث حالات مختلفة لإضافة العناصر للقائمة المتصلة وهي: • اضافة عنصر بين عنصرين في القائمة • اضافة عنصر الى بداية القائمة • اضافة عنصر الى نهاية القائمة

  19. اضافة عنصر الى بداية القائمة تتم عملية اضافة عنصر الى بداية القائمة في احدى الحالتين التاليتين وهما ان تكون القائمة فارغة اصلا وبالتالي فان list=null

  20. ان يكون العنصر المضاف يحتوي على معلومة اقل (في الترتيب التصاعدي) من المعلومة الموجودة في العنصر الموجود اول القائمة وبالتالي Element<list->info

  21. وبالتالي فان مما كان في العملية السابقة بحالتيها المختلفتين تكون كما يلي If(list==NULL||element<list->info)

  22. في حال انطبق هذا الشرط فانه سيتم اضافة العنصر الى البداية وهذا يقتضي امرين هامين هما ان يشير العنصر الجديد الى عنصر البداية في القائمة ان يشير بداية القائمة الى العنصر المضاف الجديد

  23. ملاحظة لا بد هنا من الاشارة الى ان هاتين العمليتين يجب ان تكونا بنفس الترتيب السابق

  24. مثال: الشكل التالي يمثل قائمة متصلة مرتبة تصاعديا: list 0 null 0 200 100 90 A على فرض اننا نريد اضافة العنصر التالي للقائمة: . 80

  25. في حال تنفيذ شرط الاضافة حسب ما يلي : If(list==NULL||A->info<list->info) ومن هنا ينطبق الشرط السابق ما يعني للدخول في عملية الاضافة لبداية القائمةحسب الخطوات السابقة

  26. 1) A->link=list list 90 100 200 null A 80

  27. 100 90 2) list=A list 200 null 80 القائمة بعد اضافة العنصر 80 الى البداية

  28. إضافة عنصر بين عنصرين أو في نهاية القائمة ويتم في البداية التأكد من أن العنصر لا يستحق أن يكون في بداية القائمة وذلك من خلال الخوارزمية السابقة

  29. وتبدأ عملية الإضافة بمعرفة المكان المناسب لإضافة العنصر وذلكبتعيين مؤشرين متحركين هما previous / next بحيث يبدآن بالحركة من بداية القائمة: Previous = list Next = list -> link

  30. 200 null 90 100 previous next

  31. 200 null 90 100 وتكون عملية تحريك المؤشرات بالخوارزمية التالية Previous = next Next = next -> link previous next

  32. ويتوقف مؤشر البحث عن الحركة في إحدى الحالتين التاليتين : أن العنصر المراد إضافته ينحصر بين Previous / next element < next -> info

  33. في حال وصول المؤشر nextإلى نهاية القائمة NEXT = NULL ويتم صياغة خوارزمية حالتي التوقف السابقتين كما يلي :

  34. WHILE(NEXT = NULL && !FOUND) { IF (ELEMENT < LIST-> INFO) { LOC = PREVIOUS; FOUND = TRUE;} ELSE {PREVIOUS =NEXT; NEXT= NEXT->LINK; } }

  35. وتكون خطوات عملية الإضافة كما يلي: ربط العنصر الجديد بالعنصر المشار إليه ب NEXT= PREVIOUS -> LINK newNode-> link = previous -> link

  36. 200 null 90 100 previous next 150 newNode

  37. 200 null 90 100 ربط العنصر السابق previous بالعنصر الجديد previous next 150 newNode

  38. الإضافة الى نهاية القائمة المتصلة وتعتمد على نفس مبدأ الخوارزمية السابقة حيث يتوقف البحث عن مكان الإضافة عندما تكون previous -> link = null وتتم الإضافة بنفس الآلية السابقة

More Related