1 / 19

بسم الله الرحمن الرحيم

اذا ارت الانتقال الى. 1. بسم الله الرحمن الرحيم. 2. 3. 4. 5. 6. 7. 8. 9. 10. اليوم اقدم لكم شرح كامل ووافي عن الـ linked list. 11. 12. 13. 14. 15. 16. 17. 18. 19. سأقوم في هذا الكتاب بشرح كلاً من:. اذا ارت الانتقال الى. 1. 2. 3. مقدمة عن الــ linked list .

jon
Download Presentation

بسم الله الرحمن الرحيم

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. اذا ارت الانتقال الى 1 بسم الله الرحمن الرحيم 2 3 4 5 6 7 8 9 10 اليوم اقدم لكم شرح كامل ووافي عن الـlinked list 11 12 13 14 15 16 17 18 19

  2. سأقوم في هذا الكتاب بشرح كلاً من: اذا ارت الانتقال الى 1 2 3 • مقدمة عن الــ linked list . • الصيغة العامة للـlinked list . • شرح العمليات التالية: 1-كيفية ترتيب العناصر في الذاكرة باستخدام الـlinked list . 2-اضافة عنصر في اول القائمة. 3-اضافة عنصر وسط القائمة. 4-اضافة عنصر اخر القائمة. 5-عملية زيارة القائمة وطبع محتوياتها. 6-البحث عن عنصر داخل القائمة. 7-حساب عدد عناصر القائمة. 8-حذف عنصر من القائمة. بعد ذالك سأقوم بشرح الـــDouble linked list . 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

  3. Linked listLinked list:is a data structure wherein each element contains both a data value and a pointer to next element in the list.بعض مميزات الـ linked list مايلي : تقوم بترتيب العناصر في الذاكرة حتى ولو كانت عشوائيةهنا لا نحتاج لمعرفة عدد البيانات المدخلة كما في المصفوفات التي نحدد عدد البيانات التي سوف ندخلها(نحدد حجم المصفوفة) لذالك يطلق على الــ linked list المصفوفات الديناميكية. اذا ارت الانتقال الى 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

  4. قد يقول البعض كيف يتم ترتيب العناصر في الذاكرة حتى ولو كانت عشوائية؟الجواب هو أن كل عنصر يقوم بحفظ موقع العنصر الذي يليه(الذي بعدة).وبتوضيح أكثر فلنرى مايلي: اذا ارت الانتقال الى 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

  5. null 0030 بيـــانات بيـــانات بيـــانات الطالب الثاني الطالب الأول 0030 0070 next 0070 Next بيــــــــــــــــــــــــــانات بيــــــــــــــــــــــــــانات 0070 الطالب الاول الطالب الثاني الطالب الثالث الذاكرة يتم كتابه عنوان الذاكرة(Base address) التي يوجد فيها الطالب التالي وهكذا. لدينا قائمة الطلاب التالية:- اذا ارت الانتقال الى 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

  6. تعريف الرابط This is the pointer to the next node إنشاء new node من ثم وضع المؤشر f عليها يقوم بوضع ذراع الـــf بــ null إشارة بأنة أخر عنصر في القائمة يقوم بإدخال 50 داخل الـ node التي يشير إليها المؤشر f f 50 ألان سوف ندخل في الجد:هذه الصيغة العامة للــ linked list:- اذا ارت الانتقال الى 1 2 struct nodeptr { char info; struct node*next; }; 3 4 5 6 7 سوف نبدأ ألان بأهم العمليات في الـــ linked list: أولا : عملية إنشاء node وإضافة بداخل الــــ node الرقم 50: سيتم ذالك من خلال الخوارزمية التالية: 8 9 10 11 Initial(node*f) { f=getnode( ); f->link=null; f->info=50; }; في هذا المثال قمنا بإنشاء الـnode التالية: 12 13 14 15 16 17 18 19

  7. 50 70 50 f c f إنشاء new node من ثم وضع المؤشرc عليها يقوم بربط الـnode التي أنشئنها بالـ node الأولى في القائمة first يقوم بنقل المؤشر f إلى الـ node التي ربطناها بالقائمة التي أصبحت أول node في القائمة ثانياُ:عملية ربط الـ node أول القائمة: لدينا هذه الـ node ونريد ربط node جديدة ووضعها إلا ولى في القائمة اذا ارت الانتقال الى 1 2 3 Insert_B(node*f) { node*c; c=getnode( ); c->info=40; c->link=f; f=c; } 4 5 6 7 8 9 10 11 12 13 14 15 ستكون القائمة كما يلي: 16 17 18 19

  8. يقوم بوضع المؤشر p في الـnode التي يشير إليها الـ fحتى يتم التنقل باستخدام المؤشر p في القائمة مما يحول دون ضياعها وضع البيانات داخل الـnode يقوم بنقل المؤشر p من الـnode التي يشير إليها إلى الـ node التي تليها يقوم بتنفيذها بعد توقف wile طبعاً وهذا السطر يقوم بالتالي: يقوم بربط ذراع الـnode المراد ربطها بالـ node التي يشير إليها ذراع الـ p إنشاء new node من ثم وضع المؤشرc يقوم بنقل ذراع المؤشر p من الـnode التي كان يشير إليها إلى الـnode التي تم ربطها(الـc) ثالثاُ: عملية ربط node وسط القائمة (ليس بأولها وليس بآخرها): هنا لدينا مثلاً بيانات احد الطلاب وكان رقمه 36 ونريد إن نضعه في القائمة حسب الرقم التسلسلي لأرقام الطلاب سيكون الحل كما يلي: اذا ارت الانتقال الى 1 2 Insert_l(node*f) { node*c,*p; c=getnode( ); c->info=30; p=f; while(c->info > f->info && c->info > p->info) p=p->link; c->link=p->link; p->link=c; } 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 هذا السطر يقوم بالتالي: طالما (c->info >f->info) معلومات الـnode التي يشير إليها المؤشر c اكبر من معلومات الـnode التي يشير إليها المؤشرf (&&( و (c->info>p->linked->info) معلومات الـnode التي يشير إليها المؤشر c (معلومات الـ node المراد ربطها بالقائمة) اكبر من معلومات الـ node التي يشير إليها ذراع المؤشر p 18 19

  9. 20 36 f c p 30 35 40 بعد هذا كله راح تكون القائمة بهذا الشكل: اذا ارت الانتقال الى 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

  10. إحضار القائمة 20 70 f c وضع البيانات داخل الـnode إنشاء new node من ثم وضع المؤشرc عليها طالما ذراع الــl موجودة يقوم بنقل المؤشر f من الــnode التي يشير عليها إلى الــnode التي تليها إلى إن يصل إلى أخر القائمة ( حتى يشير إلى أخر node في القائمة)عند عدم تحقق الشرط يقوم بربط ذراع الــ l التي وصلت إلى أخر القائمةبــ node التي أنشئنها يقوم بربط ذراع الــnode بــ null لأنها أخر node في القائمة بمعنى أخر إن ذراع الـc لا ترتبط بــ node أخرى 30 35 40 رابعاً: عملية ربطnode في أخر القائمة: لدينا هذه القائمة: اذا ارت الانتقال الى 1 2 ونريد أن نربط الــ node التالية في أخر القائمة: 3 4 5 6 Insert_l(node*f) { node*c; c=getnode( ); c->info=70; l=f; while(l->link !=NULL) l=l->link; l->link=c; c->link=NULL; } 7 8 9 10 11 12 13 14 15 16 17 18 يقوم بوضع المؤشر l حيث يشير المؤشر f وذالك حتى يتم التنقل باستخدام المؤشر l إلى أخر القائمة وذالك تفادين لعدم ضياع القائمة حيث أذا تم نقل العنصر f من مكانة في أول عنصر في القائمة فإننا سوف نفقد القائمة بأكملها وذالك خطأ فادح جداً. 19

  11. 70 20 c f l 30 35 40 بعد هذا كله راح تكون القائمة بهذا الشكل: اذا ارت الانتقال الى 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

  12. طالما ذراع المؤشر c لا تساوي null يقوم بطبع المعلومات الموجودة في الـnode التي تشير إليها الـc يقوم بنقل ذراع المؤشر c إلى الـ node التي تليه خامساً:عملية زيارة القائمة ألان سوف نقوم بعملية المرور على كل عناصر القائمة وطبع ما يوجد بداخلها من معلومات: اذا ارت الانتقال الى 1 2 3 4 Traverse(node*f) { node*c=f; while(c->link !=NULL) { cout<<c->info; c=c->link; } } 5 6 7 8 9 10 11 12 13 14 15 16 وضعنا القوسين ليتم تنفيذ ما بينهما باكملة اذا تحقق شرط while 17 18 19

  13. عرفنا العداد الذي سوف يتضاعف طالما الشرط تبع while محقق وهيئنه وذالك بإعطائه القيمة صفر حتى أذا ما تحقق شرط while يقوم بطبع صفر node طالما ذراع الــc موجودة يقوم بمضاعفة العداد من الصفر إلى أن تنتهي القائمة (عدم تحقق شرط while) يقوم بنقل ذراع المؤشر c إلى الـ node التي تليه وضعنا القوسين ليتم تنفيذ ما بينهما بكاملة أذا تحقق شرط while سادساً:معرفة عدد عناصر القائمة هنا سوف نقوم بعد عدد عناصر القائمة(عدد الـnode ) اذا ارت الانتقال الى 1 2 3 Traverse(node*f) { int count =0; While(c-> !=NULL) { count++; c=c->link; } } 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

  14. ندخل المعلومات التي نريد البحث عنها مع ملاحظة بأنها من نوع int إخراج القيمة NULL أذا لم نجد العنصر اذا كانت البيانات المدخلة متطابقة مع بيانات الـ node التي يقف عليها الـ c نقل المؤشر c إلى الـ node التي تليه سابعاً : البحث عن عنصر داخل القائمة: اذا ارت الانتقال الى 1 2 Search(node*f , int key) { node*c=f; cin>>key; while(c->link != NULL) { if(key == c->info) { return c; } else { c=c->link; } } return null; } 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

  15. ابحث في القائمة f عن العنصر key هذا نعتبره كوعاء نضع بداخلة البيانات التي تم البحث عنها داخل القائمة ونضعها في الـd بعد ذالك نقوم بالعمليات على الـ d (الـd هي البيانات التي نريد حذفها) إذا كان الـ d موجود في الـnode التي يشير إليها الـ f (أول عنصر) نقوم فقط بنقل المؤشر f الى الـnode التي تليه وبذالك كمنا بحذف النود التي كان فيها المؤشر f هذا لربط القائمة اذا كان الـ d (الذي نريد حذفه)بالوسط حذف d يقوم بطبعها عندما لا يجد العنصر المراد حذفه ثامناً:حذف عنصر من القائمة اذا ارت الانتقال الى 1 Delete (node*f , int key) { node*d; d=search(f , key) If(d) { if(d==f) f=f->link; else { p=getprv(d , f) p->link=d->link } free(d) } else Display not font } 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

  16. This is the pointer to the next node This is the pointer to the proviso node f Double linked list اذا ارت الانتقال الى اولاً : الصيغة العامل للـ double linked list 1 2 struct nodeptr { char info; struct node*next; struct node*proviso; }; 3 4 5 6 7 8 9 الشكل العام للـ double linked list 10 11 12 13 14 15 16 17 18 19

  17. ثانياً:لربط node في قائمة double linked list نقوم بالتالي اذا ارت الانتقال الى • قبل ذالك دعونا نعرف التالي: • (c->link) معناه ذراع الـ c . • (c->llink)معناه ذراع الـ c التي في اليسار. • (c->rlink)معناه ذراع الـc التي في اليمين. 1 2 3 4 ...................................................................... لكي نقوم بربط node نقوم بالتالي: 5 6 1).c->rlink=p->rlink 2).c->llink=p 3).p->rlink=c 4).c->rlink->llink=c 7 8 9 10 11 قد يسال البعض ما معنى (c->rlink->llink=c) راح أخبركم هذا معناه: هذه تشير إلى الذراع اليسرى تبع الـnode التي تشير إليها الـnode التي عليها المؤشر c من جهة اليمين لوضعها على الـ node التي يشير اليها المؤشر c . اذا مافهمتو من خلال الشرح بواسطة الكلام راح تفهمو انشاء الله من خلال الرسم التالي: 12 13 14 15 16 17 الصفحة التالية 18 19

  18. f p c ملاحظة :سوف يظهر كل سطر من الاوامر السابقة من ثم تظهر العملية (التي ستتم على القائمة )في الرسم لذالك يرجا التركيز. اذا ارت الانتقال الى 1 2 3 4 5 6 7 8 9 10 11 1).c->rlink=p->rlink 12 13 2).c->llink=p 14 3).p->rlink=c 15 4).c->rlink->llink=c 16 17 18 19

  19. قام بشرح المحاضرة: اذا ارت الانتقال الى 1 2 3 • الطالب:محمد راشد صالح داود • جامعة صنعاء --------- اليمن. • كلية الحاسب الالي. • سنة ثانية ـــــــــ المجموعة التاسعة. • شرح المحاضر مستنبط من شرح الدكتور فضل باعلوي • مع شكري الخاص وشكر المجموع التاسعة الى الدكتور فضل باعلوي. If you have any question or feelerpleassend to me by this email: mohammed2008_dawod@hotmail.com 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

More Related