Skip to content
Get App

Lab3 - Part1

محاضرة عملية عن Linked List: مفهوم الـ Node والـ Head والـ Tail، والفرق مع الـ Array، وعمليات الإضافة والحذف، مع مدخل لتنفيذ Singly Linked List في جافا.

Key Takeaways

  • الـ Linked List تحل مشكلة الحجم الثابت للـ Array وتقلل تكلفة الإضافة والحذف في البداية
  • كل Node تخزن القيمة ومؤشر للعنصر التالي، والـ Head يحدد بداية القائمة
  • إضافة العنصر في البداية أو النهاية تتم بتحديث المؤشرات دون إزاحة العناصر
  • المحاضرة تمهيد عملي قبل تنفيذ الكود الفعلي في جافا

What the video covers

  • مقدمة عن معمل Data Structures and Algorithms وتقديم المحاضرة الأولى عن Linked List
  • مشاكل الـ Array: الحجم الثابت وتكلفة الـ Shift عند الإضافة أو الحذف في المنتصف أو البداية
  • شرح الـ Linked List كبديل يخزن العناصر في Nodes مرتبطة بالمؤشرات (References)
  • تعريف الـ Node: تحتوي على Element (القيمة) و Next (المؤشر للعنصر التالي)
  • الـ Head هو أول Node والـ Tail هو آخر Node ويشير إلى null
  • تشبيه الـ Linked List بقطار من العربات المتصلة
  • عمليات الإضافة في البداية (addFirst) والنهاية (addLast) والحذف من البداية (removeFirst) مع تحديث المؤشرات
  • تمثيل الكلاس Node كـ private generic class داخل كلاس السنجلي لينكد ليست
  • كلاس السنجلي لينكد ليست يحتوي على Head و Tail و size
  • شرح الـ Singly Linked List مقابل Circular و Doubly Linked List وعملياتها

Answers

Questions about this video

لماذا نستخدم Linked List بدلاً من Array؟

لأن الـ Array لها حجم ثابت، وإضافة أو حذف عنصر في المنتصف أو البداية تتطلب إزاحة (Shift) لكثير من العناصر مما يزيد التعقيد الزمني. الـ Linked List تحل هذه المشكلة بربط العناصر عبر المؤشرات.

ما هي مكونات الـ Node؟

الـ Node تتكون من جزئين: Element وهو القيمة المخزنة، و Next وهو المؤشر إلى الـ Node التالية في القائمة.

ماذا يمثل الـ Head والـ Tail؟

الـ Head هو مؤشر لأول عنصر في القائمة، ويجب الاحتفاظ به لأن فقدانه يعني فقدان الوصول لكامل القائمة. الـ Tail هو آخر عنصر ويشير دائماً إلى null.

Full Transcript — Download SRT & Markdown

00:00
Speaker A
السلام عليكم. أنا معكم المهندسة مرح الجبالي، إن شاء الله رح أكون معكم في معمل Data Structures and Algorithms.
00:11
Speaker A
بالإضافة للمهندس عبد الله شحادة. اليوم إن شاء الله رح نحكي عن Linked List.
00:17
Speaker A
هو أول مفاهيم Data Structures. تمام، في هذا اللاب إن شاء الله رح نعرف شو هو، شو هي، إيش هي الـ Linked List كمفهوم.
00:26
Speaker A
من إيش بتتكون؟ إيش هي الـ Node؟ كيف بترتبط الـ Nodes مع بعض؟ إيش العمليات الأساسية اللي بتعملها الـ Linked List؟ وكيف الـ Implementation تبعتها؟ نفهم الـ Circular Linked List والـ Double Linked List، والعمليات اللي بيعملوها.
00:43
Speaker A
الآن في جافا أخذنا موضوع الـ Array، وبنعرف إنه الـ Array هي إيه، فيها بتخزن عناصر، لكن في Fixed Capacity، يعني إلها حجم ثابت.
00:53
Speaker A
بمعنى إنه هي شغلة إنه حجمها ثابت، لو خلصت السعة اللي موجودة أو السعة المتاحة في الـ Array وأنا بدي أضيف عناصر، رح يكون في مشكلة.
01:02
Speaker A
الشغلة الثانية من مشاكل الـ Array إنه أنا لو بدي أضيف عنصر في المنتصف أو بدي أحذف عنصر من البداية، رح أضطر أعمل Shift لكثير من العناصر، وهذا بيأثر على الـ Complexity تبعت الـ Code تبعي.
01:17
Speaker A
فكان الحل، تمام، إيه تقنياً، بفكرة الـ Linked List، اللي هي بتوفرلي حل بديل أو حلول بديلة لموضوع الـ Array.
01:27
Speaker A
بتخزن العناصر في Node. في شغلة بنسميها Node، وبتربط كل الـ Nodes مع بعض عن طريق References. خلينا نشوف هي المفاهيم بتطبيق عملي. الآن أنا نفترض عندي Array، تمام؟ هي الـ Array فيها 16 عنصر، أو خلينا نعمل Array جديدة، تمام؟
01:49
Speaker A
خلي الـ Size تبعها يكون سبع عناصر. تمام. أنشأنا Array الحجم تبعها سبع عناصر، مثلاً إنت، إحنا بننشأها بالكود، إحنا حالياً بنعمل بشكل صوري عشان نشوفها بشكل أوضح.
02:04
Speaker A
فيها هاي العناصر الموجودين أمامنا 92 و82 و5. الآن لو أنا بدي أعمل Insert، بمعنى بدي أعمل إضافة للعنصر، الـ Value إله سبعة مثلاً.
02:16
Speaker A
تمام، في الـ Index رقم اثنين، أو خلينا نشوفها، الطريقة الأسهل: لو أنا بدي أضيف للآخر، الموضوع حيكون سهل. لو بدي أضيف للـ Index رقم أربعة، حأعمل Insert عادي، ضاف، ما صار في شيء.
02:29
Speaker A
فما أثر على الـ Complexity تبعي. لكن لو أنا بدي أعمل Insert مثلاً للعنصر رقم، أو أعطيه قيمة 20، تمام، في الـ Index رقم ثلاثة، وعملت Insert، إيش رح يصير؟ رح يخزن القيمة في متغير، ويصير يلف على كل الـ Index. طبعاً هو بخزن في الآخر، الـ Array.
02:48
Speaker A
دائماً بتخزن في الآخر. وبتصيري تلفي دائماً وين؟ في الـ Index لقدام. تصيري تلفي في الـ Index لقدام، لما نوصل للـ Index اللي احنا بدنا إياه، وصل للثلاثة، ضافها، تمام.
03:00
Speaker A
لو بدي أعمل أنا Remove First، أو بدي أعمل Remove من الـ Index رقم صفر، يعني أول عنصر، اللي هو الرقم اثنين.
03:09
Speaker A
رح تحذف اثنين، رح تصير تشفت العناصر لليمين. رح تصير تشفت العناصر كلها لليسار، قصدي.
03:18
Speaker A
وفي الآخر بتحذف العنصر، فأنا عملت Shift بمقدار كل العناصر المخزنين في الـ Array، فهي مشكلة للـ Complexity، وبتغلب لأنه أنا لو كان عندي مثلاً Array فيها مليون عنصر، تخيل قديش رح يكون الوقت المستهلك عشان أعمل Shift لليمين أو لليسار، إذا أنا بدي أضيف عنصر أو أحذف
03:37
Speaker A
عنصر. الحل كان في موضوع الـ Linked List. لنفترض إنه أنا عندي Linked List، خلينا نعمل Linked List جديدة.
03:49
Speaker A
فيها عشر عناصر. Sorted، بدنا ما بدنا إياها تكون مرتبة؟ تمام؟ هي فيها، أنا عندي هنا Linked List، تمثيلها بهي الطريقة: يكون أنا عندي Nodes فيها القيمة، وفيها Pointer بيأشر على الـ Node الثانية. فيها العناصر الموجودين. أول عنصر في الـ Linked List اللي أنا بتعامل
04:12
Speaker A
معها اسمه Head. تمام؟ وآخر عنصر بيكون اسمه Tail. خليني أعمل Insert مثلاً. لاحظوا إنه أنا حالياً عرفت، يعني عرفت فيها كأنه طولها 10. لو أنا بدي أضيف للبداية القيمة، الـ Value، للـ Node أو الـ Element، فيه 29، خليني أضيفها. عمل Node
04:33
Speaker A
جديدة، أعطى المؤشر للـ Head اللي وراها، ورجع مين؟ الـ Head. أنتو شوفوها نظرياً ونروح نشرح هذا الكلام اللي بيصير حالياً بالكود.
04:41
Speaker A
تمام؟ فهي الفكرة إنه أنا ما عملت Shift، أنا فقط رحت جبت عنصر جديد، حطيته في البداية، وأعطيت المؤشر لعنصر ثاني.
04:50
Speaker A
خلينا نرجع للـ ملف تبعنا. حالياً، زي ما إحنا شايفين، هذا هو تمثيل الـ Linked List. الـ Linked List حكينا بتتكون بشكل أساسي من الـ Node، من مجموعة Nodes، تمام؟ الـ Node بتخزن داخلها Element، بتخزن داخلها عناصر: قيمة، رقم، كلمة، نص، اللي بدي
05:11
Speaker A
إياه. وفيها كمان الـ Next أو المؤشر، اللي هو الـ Reference اللي بيربطها مع الـ Node الثانية. يعني هذا كله Node.
05:21
Speaker A
تمام؟ الدائرة الكبيرة كلها Node. الـ Value هي اسمها Element، رح نعطيها E.
05:27
Speaker A
والـ Reference هذا اسمه Next، رح نسميه في تعريفنا للـ Node، تمام؟ Next. فلاحظنا إنه الـ Linked List بتكون مكونة من مجموعة Nodes، هي Node، وهي هذه كمان Node، وهذا كمان Node. وهي كمان Node. أول Node، تمام؟ اسمها الـ Head.
05:47
Speaker A
أول Node في الـ Linked List بسميها دائماً Head. هي عبارة عن مؤشر بيكون دائماً بأشر على أول قيمة أو أول Node موجودة عندي في الـ Linked List.
05:57
Speaker A
وآخر عنصر أو آخر Node موجودة في الـ Linked List بسميها Tail، اللي هو الذيل. ودائماً الـ Tail بأشري إلى Null. ودائماً الـ Tail بأشري إلى الـ Null. فخلينا احنا نفكر بموضوع الـ Linked List كأنها قطار من العربات، كأنها قطار. هي عبارة عن عربة
06:17
Speaker A
وهي عربة وكلهم متصلين مع بعض. أول العنصر هو الـ Head، بيكون دائماً متصل بالعنصر أو الـ Node اللي وراه.
06:25
Speaker A
آخر عنصر اسمه، أو الـ Node اسمها الـ Tail، دائماً بأشر إلى Null. تمام؟ عشان أنا أعرف إنه الـ Tail أو أنا وصلت إلى آخر عنصر في الـ List تبعي.
06:36
Speaker A
تمام. بما إنه احنا حالياً فهمنا فكرة الـ Linked List، فخلينا نرجع نشوفها بصرياً كمان مرة الموجودة. هي أنا عندي العنصر، هذه هي الـ Node، هي الـ Reference تبعي بأشر إلى العنصر اللي وراها. أول عنصر اسمه Tail، اسمه Head، وآخر عنصر اسمه Tail. لو أنا بدي
06:53
Speaker A
أعمل Insert، تمام؟ بدي أعمل Insert للـ Tail. خليني أعطي قيمة 100، تمام؟ ورحت عملت Insert عادي.
07:11
Speaker A
القيم اللي بيسمح فيها، خليني أعطي قيمة 90 مثلاً. جو. عمل Node جديدة 90، تمام؟ سماها Tail وأعطاها الـ Reference تبع الـ Tail القديم. خلى الـ Tail القديم يأشر عليها.
07:26
Speaker A
وسماها هي الـ جديدة Tail وزود، لاحظوا إنه زود الحجم. زود السعة تبعت الـ Linked List. رح نشوف التمثيل الحقيقي للـ عملية الإضافة والإزالة إن شاء الله بالكود، لكن خلينا نشوفها بصرياً.
07:38
Speaker A
لو كمان بدي أحذف أنا من الـ Head، هي Remove the Head، تمام، اللي عند الـ Index زيرو، ما راح يعمل Shift. عملت Delete خلص، رفع القيمة وفقط غير الـ Head، أعطاها للـ New Head. تمام.
07:55
Speaker A
وهي هي فكرة الـ Linked List تبعتي، كيف تمثيل الـ Node؟ كيف أمثلها؟ النود أول شيء أمثلها ككلاس داخل كلاس الـ Linked List الكبير. دائماً بتكون هي Private، فأنا بدي أعرف Private Class تمام، اسمه Node، هاي
08:15
Speaker A
الإشارة بمعنى أنه Generic، وأكيد أخذتوا هاي التفاصيل، الكود في جافا، في مراجعتها في اللابين الأول والثاني. تمام. فالـ Node بشكل أساسي تحتوي على Element وعلى Next. أي Node أنا عندي فيها Element، تمام، بخزن فيها القيمة اللي
08:34
Speaker A
أنا بدي أخزنها، وفيها الـ Next اللي بتأشر على الـ Node اللي وراها. معنى هذا الكلام أنه أنا بحتاج Element، تمام، نوعها Generic حسب قيمة النوع تبع الـ Node، وكمان بحتاج Node اللي هو الـ Next، مؤشر لـ Node ثانية، م
08:53
Speaker A
بيستقبل الإليمنت تمام وبيستقبل الـ النكست تبعي وأنا هنا عملت لهم أساين كل وحدة لشغلتها فاللي حتدخل في الإليمنت في خانة الإليمنت للنود راح أخزنها في الإليمنت واللي حتدخل في خانة النكست راح أخليها هي للنكست نلاحظ هنا أنه الهيد هي مؤشر لأول عنصر في الأري لو
09:14
Speaker A
أنا فقدت الـ هيد في الـ الـ الـ ليست سوري لو أنا فقدت الهيد معناها أنا فقدت الوصول لكامل الليست الموجودة فمعرفة الهيد كمؤشر موضوع كثير مهم موضوع كثير مهم تمام إذاً هذا هو تمثيل الـ الـ اللينكد ليست في الـ
09:34
Speaker A
الـ نود في اللينكد ليست هذا دائماً الـ كلاس بيكون برايفيت نستد داخل ال كلاس الكبير اللي هو راح يكون اسمه ال ال السنجلي لينكيد ليست وراح نتعرف عليهم إن شاء الله.
09:47
Speaker A
تمام هلا اللي ليست بما إنه احنا تعرفنا على فكرتها خلينا نشوف ايش العمليات اللي بنقدر نعملها اللي هو كانت واضحة معنا في الفيجوالايزيشن اللي عملناه قبل شوية إني أنا بدي أضيف أد فيرست، أد لاست، ريموف فيرست. هدول الثلاث عمليات الأساسية
10:00
Speaker A
اللي أنا بعملهم على السنجلي لينكيد ليست وبقدر أنا أعدل عليها بالعمليات حسب اللي أنا بحتاجها.
10:07
Speaker A
السنجلي لينكيد ليست تمام بتخزن بتخزن الريفرنسز للهيد والتيل مع بعض ودائما فيها سايز يعني في ككلاس ال ال ال سنجلي السنجلي لينكيد ليست لما أجي أنشئ له كلاس في ال ككود جافا بيحتوي على هيد وعلى تيل وعلى السايز عشان يعد
10:27
Speaker A
الحجم. الهيد والتيل عبارة عن ريفرنسز مؤشرات تمام. عملية الإضافة والحذف دائما بتصير من منهم دائما ايش مالها؟ طريقة سهلة جدا. فأد فيرست لو أنا عندي مثلا هذه هي اللينكيد ليست الموجودة وأنا أعطيته أمر أد فيرست القيمة ال إي إكس مثلا تمام.
10:49
Speaker A
بدي أروح أنا أجيب نود جديدة أعطيها الإليمنت ال ال إي إكس وأعطي المؤشر تبعي لمين؟ للأولد هيد وأخلي النيو إليمنت هذا هو النيو هيد.
11:00
Speaker A
هاي هي فكرتها كلوجيك تمام وراح نشوفها هلا إن شاء الله رب العالمين في الكود.
11:06
Speaker A
أما أد لاست لنفترض إنه أنا هذه هي عندي ال ال ال ليست الموجودة تمام وموجود أعطيني ما في أمر عندي كود أد لاست ال إم إي ايش راح أروح أعمل؟ راح أروح أعمل نيو نود تمام راح أعطيها قيمة ال ال ال بدي أخزنها
11:23
Speaker A
فيها وأخليها تأشر على نل لأنها خلص صارت هي التيل الجديدة والأولد تيل تمام ال ال الأخير اللي هو التيل في ال في الليست القديمة قبل ما أحدث عليها رح أخليها تأشر على النيو تيل تبعي اللي هو النيوند الجديدة
11:39
Speaker A
اللي رح أضيفها. لو بدي أحذف أنا من البداية تمام؟ هذه هي رح تكون كلها اللست تبعتي رح أروح أحكي ريموف فيرست رح أروح للهيد أحذف الإليمنت تبعها وأخلي المؤشر دائماً يبدأ من مؤشر الهيد يتحرك لمين؟ للعنصر الثاني. مؤشر
11:56
Speaker A
الهيد يتحرك للعنصر الثاني. خلينا نشوفهم هذا اللوجيك كيف نمثله احنا في الكود. أد أول شيء أد فيرست أنا رح أعرفهم كـ ببلك فانكشن لأنه هدول اللي أنا بقدر يتعامل معهم المستخدم وبيقدر يـ يـ يتعامل معهم لأنه هو ما رح يتعامل مع النود لأنها
12:15
Speaker A
برايفيت فرح يتعامل مع هاي الفانكشن. أد فيرست رح تاخذ الإليمنت اللي بدي أخزنه طبعاً نوعه جنيرك.
12:24
Speaker A
رح أعمل هيد أعرف هيد جديدة فيها نيوند تاخذ الإليمنت اللي أنا دخلته والمؤشر تبعها هو الهيد تمام؟ الهيد القديم.
12:34
Speaker A
و إذا السايز يساوي يساوي صفر معناها التيل هي نفسها الهيد بعدين بدي أزيد الحجم بدي أزيد السايز. معنى هذا الكلام ايش اللي بصير؟ خلينا نغير هنا اللون.
12:46
Speaker A
تمام نيجي نشوف لو أنا كانت عندي هنا في الأساس أنا السايز بدي أفترض إنه أنا ما في عندي لينك ليست عرفت لينك ليست بس ما فيها عناصر لسه. فأد فيرست رح أضيف عنصر تمام رح أعمل هيد هي نيوند
13:05
Speaker A
هي نيوند تمام اسمها هيد. وهي خلص صارت هي هي الهيد تأشر عليها هي الهيد يأشر عليها قيمتها هي الإليمنت والريفرنس تبعي هو مين؟ هو الهيد. هو مين؟ هو الهيد رح يأشر على الهيد.
13:23
Speaker A
فهذا هو النكست. بما إنه الـ الـ السايز تبعها يساوي صفر، يعني هذا هو أول عنصر، فالهيد هو نفسه مين؟ هو نفسه التيل. هو نفسه التيل.
13:35
Speaker A
طيب، لو أنا بدي أعمل أد فيرست كمان مرة، ولكن أنا عندي عنصر موجود، تمام؟ خلص رح أروح أعمل الـ الـ نيو نود الجديدة.
13:44
Speaker A
تمام؟ هي نيو نود جديدة فيها الـ فيها إليمنت. ورح تأشر على الهيد. تمام؟ الهيد القديم، ورح أسميها هذه هي هيد، معناها أنا رح ألغي المؤشر تبع الهيد هذا، وأخليه للنيو نود الجديدة.
13:59
Speaker A
خلص، وهنا بنـ بنـ نلغي الهيد، بضل مين أنا عندي؟ التيل هو التيل. لو بدي أنا أعمل أد لاست، بدي أضيف لـ الآخر، كيف بدي أعمل؟ أد لاست، بدي أروح أنا أعمل نود جديدة كمان.
14:16
Speaker A
بدي أعمل نود جديدة. برضو فيها الإليمنت. وبما إنها أنا بدي أضيف للآخر، فهي رح تأشر على النل، رح تأشر على النل، يعني ما إلها مؤشر.
14:28
Speaker A
إيه، ورح أسميها نيو نود، رح أسميها نيوست أو نيو نود، أي اسم بدي إياه، هي فقط نود، هي نود.
14:36
Speaker A
إذا كانت الـ الـ الـ ليست تبعتي إمتي، فالهيد هي النيوست. نفس الفكرة، غير هيك، التيل القديم أنا عندي، بدي أخليه يأشر، ست نيكست، المؤشر تبعه على النيو نود، الـ أو الـ نيو الـ نيوست نود اللي أنا عرفتها، والتيل هو مين؟ يصير
14:55
Speaker A
نيوست، فبالتالي أنا خلص خليته يأشر على النل. وزدت الـ الـ السايز تبعه بلس بلس، تمام؟ فهي هي الفكرة إني أنا فقط بغير مؤشرات.
15:07
Speaker A
كمان مرة، لو أنا بدي أضيف لاست، إيش بدي أعمل؟ بدي أعمل نيو نود، تمام؟ بخلي فيها إليمنت، اللي أنا بدي أنا أضيفه، وبخليها تأشر على مين؟ على النل.
15:19
Speaker A
خلصت. بعد هيك إيش بدي أروح أعمل؟ هل هي فارغة؟ لأ، مش فارغة، فيها هي عندي أنا ثلاث عناصر قبل هيك.
15:25
Speaker A
بدي أروح أخلي ال ال ال التيل. المؤشر تبع التيل اللي هو هذا مش هذا هو أنا بالنسبة إلي التيل؟ بدي أخلي المؤشر تبعه يأشر على النيو نود اللي أنا عرفتها.
15:37
Speaker A
وأخليها هذه هي التيل كقيمة يساوي النيو نود. فصارت أنا عندي هي هي التيل. فالست نيكست هاي بتغير في ال ال ريفرنس.
15:46
Speaker A
وهاي فقط أنا بغير يعني كأني المسمى تبعي أو القيمة تبعتي للتيل صارت هي القيمة تبعت النيو نود. وزدت الحجم لأني أنا عملت أديشن أو عملت أد ل عنصر جديد في الليست.
16:00
Speaker A
لو بدي أحذف من البداية هل هي إمتي؟ إذا كانت فاضية الليست معناها بدي أرجع نل.
16:05
Speaker A
مافيش إشي. غير هيك معناها فيها عناصر. بدي أنا أروح. ال ال الهيد تبعي بدي أخذ منه قيمته.
16:14
Speaker A
أنا بدي أرجع هذه ريموف فيرست. بتحذف أول عنصر وبترجع القيمة تبعته. معناها أنا ححتاج متغير. تمام؟ بخزن فيه قيمة الإليمنت الموجود في الهيد. هيد دوت جيت إليمنت. من الهيد هات لي الإليمنت تبعه.
16:28
Speaker A
وخزنوه في الجواب أو في المتغير أنسر. والهيد تبعتي بدي أغيرها لمين؟ أخليها تأشر. على الهيد دوت جيت نيكست. ال ال ال المؤشر الثاني أو آخذ المؤشر للعنصر الثاني من الهيد وبخليها هو الهيد. وأنقص السايز بواحد. وخلص. إذا كانت السايز تبعي
16:50
Speaker A
يساوي صفر. تمام؟ معناها إنه التيل يساوي نل. معناها هي هي العنصر الوحيد الموجود. في ال في الليست تبعي. وفي الأخر بدي أرجع أنا القيمة اللي كانت مخزنة عندي في التيل.
17:03
Speaker A
تمام؟ هاي هي ال ال فكرة. نقرأ الإمبورتنت إيه نوت هنا. إنه وين إنسيرتينج أت ذا هيد. لينك ذا نيو نود تو ذا أولد هيد بيفور لوزينج the reference.
17:19
Speaker A
معنى هذا الكلام إنه أنا لو بدي أضيف تمام إلى البداية في الهيد، أنا اللي بدي أعمل دائمًا إني أغير أغير المؤشر أخليه ما بدي أنا أغير القيمة وأفقد المؤشر، لا، أنا لازم أحافظ على المؤشر تبعي عشان أربطه بباقي الليست.
17:36
Speaker A
لازم النيو نود، تمام، أربطها بالـ بالـ بالأولد هيد، بالهيد الـ الأولى أو القديمة قبل ما أنا أفقد المؤشر تبعها.
17:49
Speaker A
تمام. حاليا إحنا فهمنا هذا الموضوع باللوجيك، خلينا نرجع نعيد ونأكد عليه في موضوع الفيزيواليزيشن بصريًا. أنا هي عندي لينكيد ليست، خليني أنا أنشئ اللينكيد ليست الجديدة، كرييت، تمام، إنتي لينكيد ليست.
18:05
Speaker A
خلينا نعرفها فيها هذول العناصر، حجمها إيه 10 خلينا نقول أو خلينا نقول حجمها معرف من البداية خمسة، راندوم سورتد. صار أنا في عندي هنا إيه لينكيد ليست فيها خمس عناصر، تمام.
18:21
Speaker A
أول عنصر اسمه الهيد، آخر عنصر اسمه التيل. كل عنصر بيأشر بريفرنس أو بمؤشر على العنصر اللي وراه.
18:30
Speaker A
بدي أعمل إنسيرت، خليني أعمل إنسيرت للهيد، إنسيرت للإندكس زيرو مثلًا، هي نفسها أد فيرست.
18:38
Speaker A
إنسيرت هي إضافة للإندكس زيرو أو للهيد، معناها أنا بدي أعمل أد فيرست. خليني أعمل أد فيرست للقيمة اثنين.
18:47
Speaker A
إيش بده يعمل؟ حيّعرف نود جديدة، أعطاها القيمة اثنين، خلاها تأشر على النود الأولى وغير القيمة.
18:55
Speaker A
أشرت على الهيد الأولى، هي الكود هنا واضح. أنا عملت نود جديدة، تمام، أخذت القيمة الاثنين، بعد هيك النود الجديدة دوت نيكست خليتها تأشر على الهيد، بعد كده الهيد نفس خليتها هي اللي الـ الـ الـ اللي نيو نود أو الـ الـ
19:12
Speaker A
نود الجديدة اللي أنا عرفتها فصارت أنا عندي هذه هي الهيد. كمان خليني أعمل أد لاست.
19:19
Speaker A
هي أد لاست، خليني أنا أضيف القيمة مثلًا تكون 20. جو، هي عمل نود جديدة، خلى التيل دوت نكست يأشر على النود الجديدة.
19:31
Speaker A
والتيل هو صار مين؟ هو صار النود اللي أنا عرفتها، فأنا في البداية بعمل المؤشر، الريفرنس، بعدين بعمل مين؟ بعمل التيل.
19:43
Speaker A
لو بدي أعمل ريموف. فيرست، هي ريموف فيرست، بروح بعمل متغير جديد، تمام؟ اسمه تيمب، بخزن فيه القيمة اللي فيها النود، قيمة الهيد الأصلية. بعدين اللي هو الهيد.
20:00
Speaker A
دوت. اللي هو ايش قيمة الهيد دي تصير؟ اللي هي الهيد دوت نكست، مش هذه كانت في قيمة أنا عندي هنا اثنين هي الهيد. فالهيد الجديدة بدها تصير الهيد هذه هي الدوت.
20:10
Speaker A
النيكست تبعها، لو بدي أنا أحذف من ال- ال- التيل، تمام؟ عرفت تيمب. بصير أنا أمرره لآخر شيء، بدي أفحص، كيف بدي أفحصه؟ بمشي أنا أول شيء لل- للأولى، للهيد.
20:26
Speaker A
هل هي المؤشر تبعها نل؟ لا، معناها مش هي، بمشي لآخر عنصر لما أوصل للعنصر اللي كان أخير، المؤشر تبعه يأشر على نل، معناها هو هو ال- هو التيل.
20:37
Speaker A
معناها التيمب تبعي هو التيل الموجود اللي أنا عرفته، بحذفه، وآخر عنصر تبعي بخليه هو يأشر على نل، بلغي أنه يأشر على التيل الأول.
20:49
Speaker A
تمام؟ فهي هي فكرة ال- اللينكد ليست. تبعتي بكل العمليات الموجودين، الآن كيف أنا بدي أمثل اللينكد ليست في جافا، تمام؟ ال- السنجلي لينكد ليست هي.
21:02
Speaker A
طبعًا اللينكد ليست أنواع، احنا حاليًا بنتعرف على السنجلي منها، النوع السنجلي لينكد ليست، ال- اسـ الـ الـ اللي هو بتكون فقط فيها نود واحدة بتأشر على اللي بعدها، كل نود بتأشر على اللي بعدها.
21:14
Speaker A
كيف أمثلها؟ تمام؟ هي هنا موضح إنه أنا في عندي كلاس اسمه سنجلي لينكيد ليست بياخذ جنريك تايب، بيحتوي بشكل أساسي على الهيد والتيل والسايز.
21:26
Speaker A
وفانكشن أنا بضيفها، أد فيرست، أد لاست، ريموف فيرست، ريموف لاست، أو ممكن أنا أجيب العنصر الأول، العنصر الأخير، وأي فانكشن أنا ممكن أنـ أضيفها وأكتبها بالـ كلاس تبعي. بالإضافة إنها بتحتوي على برايفيت كلاس اسمه نود، كمان هو جنريك
21:41
Speaker A
بيحتوي على إليمنت على النكست وـ وـ الـ فانكشن بحتاجهم لأنه هو عشان موضوع الإنكابسوليشن والـ والقيود والخصوصية، جيت إليمنت، سيت إليمنت جيت نكست أو إيه سيت نكست وهي الأمور. فـ خلينا نيجي نشوف الكود.
22:05
Speaker A
تمام. هي أنا عملت هنا كلاس عملت هنا أنا كلاس سنجلي لينكيد ليست، هي عرفته ببلك كلاس عشان أقدر أوصله من نوع جنريك، بيحتوي على برايفيت هيد، طبعًا الهيد هي أصلها نود.
22:24
Speaker A
بيحتوي على تيل، أصله كمان نود، تمام؟ والسايز هو إنتجر. طبعًا هدول كلهم حيكونوا برايفيت لأنه أنا ما بدي أوصل للهيد والتيل ويصير في تغيير عليهم مباشرة.
22:36
Speaker A
طبعًا رح أعطيهم قيم كلهم أساسية نل. هذا هو تعريف السنجلي لينكيد ليست إيه كلاس.
22:42
Speaker A
طبعًا بدي أعمل فانكشن ترجعلي السايز وفانكشن هل هي إمتي أو لا؟ أسميها إز إمتي.
22:49
Speaker A
فانكشن اسمها فيرست إذا كانت الـ الـ الـ ليست إمتي رح ترجع نل، إذا كانت لا، رح ترجع الهيد.
22:58
Speaker A
بما إنه هي الفيرست معناها أنا رح أرجع الهيد. الهيد دوت جيت إليمنت. اللاست نفس الإشي لو فارغة رح ترجع نل، لو لا رح ترجع اللي هو التيل دوت جيت إليمنت.
23:11
Speaker A
تمام؟ أد فيرست بنفس الفكرة اللي شرحناها، اللي هو رح أعرف هيد جديدة فيها نيو نود بتاخد الإليمنت وبخليها تأشر على الهيد لأنه النكست تبعتي هو الهيد نفسه.
23:22
Speaker A
وإذا السايز يساوي يساوي صفر فالتيل هو الهيد وأزيد الحجم واحد. أد لاست بنفس الفكرة وريموف فيرست بنفس الفكرة اللي إحنا عرفناهم في الـ في المعمل.
23:34
Speaker A
الآن هي هي كلاس النود. برايفيت ستاتيك. لاحظوا إنه داخل السنجلي لينكيد ليست. هي الـ كلاس السنجلي لينكيد ليست. بوبليك داخله برايفيت كلاس للنود.
23:45
Speaker A
فيها برايفيت إليمنت وبرايفيت كمان نود اللي هو سميتها النكست عشان أتوضح لي إنه بأشر للنكست. هي الكونستركتور بياخد الإليمنت وبياخد النكست كنود.
23:57
Speaker A
وعملت لهم هنا أساين بالمتغيرات الأساسية اللي في الـ في الكلاس سنجلي لينكيد ليست. وعملت لهم جيتر وسيتر عشان أسهل التعامل معهم. فأنا عندي هذا الكلاس جاهز.
24:09
Speaker A
أنا عملته لأنه جافا ما فيش فيها سنجلي لينكيد ليست إيه مبنية في مكتبات جاهزة. فعشان إحنا نتعرف على مفهوم السنجلي لينكيد ليست اللي هو كل نود بتأشر على اللي بعدها فقط بمؤشر واحد.
24:22
Speaker A
إيه إحنا أنشأناه. بتقدروا تنشئوه لحالكم وبفهمكم. وأنا رح أرفع لكم الـ الملف هذا على إيه الموديل وبتنزلوه.
24:32
Speaker A
خلينا نيجي نشوف تطبيق عملي على هذا الموضوع. أنا هنا هي المين. أنا عرفت سنجلي لينكيد ليست. بدي أخزن إيه نيم. مجموعة أسماء في سنجلي لينكيد ليست.
24:43
Speaker A
أد لاست رح يعمل لي نود في الآخر اسمها أحمد. بتاخد إليمنت أحمد. والمؤشر تبعها نل. تمام؟ يعني لو أنا إجيت عملت هنا كومنت الإليمنت الإليمنت يساوي أحمد والـ نيكست هو النل.
25:06
Speaker A
تمام؟ كمان مرة أمر أي أمر ثاني أد لاست برضه نفس الإشي بدي أروح لـ آخر إشي الإليمينت تبعي نوت جديدة رح أحط فيها سارة.
25:17
Speaker A
تمام؟ بعد هيك أنا إيش بدي أعمل؟ بما إنها أد لاست بدي أروح أخلي الـ الـ إيه بدي أخلي تبعها الـ الـ نيكست تبعها يأشر على نل.
25:32
Speaker A
تمام؟ بما إني أنا ضفت أد لاست معناها هي النيكست تبعها مش رح يكون النل رح يتغير لمين؟ لسارة.
25:41
Speaker A
النيكست تبعها رح يكون سارة، يعني أحمد النيكست وراه سارة، سارة وراها النيكست نل. تمام؟ بعد هيك عندي أمر جديد اسمه أد لاست برضه معناها أنا رح أضيف إليمينت اسمه عمر. تمام؟ للآخر معناها النيكست تبعه رح يكون نل.
25:59
Speaker A
طيب معنى هذا الكلام بما إنه خلص أنا عرفت إليمينت جديدة أو نوت جديدة فيها الإليمينت عمر والنيكست تبعها نل بدي أروح أخلي التيل القديمة تأشر على مين؟ تأشر على النيو نوت اللي هو أنا سميتها عمر.
26:15
Speaker A
صح؟ تمام وآخر إيه هو كود سطر كود معي اللي هو أو أمر كود اللي هو أد فيرست. معناها أنا بدي أنشئ إليمينت جديدة اسمها لينا تمام؟ النيكست تبعها رح يكون وين؟ على الهيد الأولى.
26:36
Speaker A
ورح يكون نيكست تبعها على الهيد الأولى. مين الهيد الأولى؟ أحمد. لأنه هي هي صارت الهيد. صح؟ ولو أنا أجيت طبعت هنا طيب اطبعلي الفيرست مين هو الفيرست؟ لينا. فأنا ايش صار عندي هنا؟ لينا النيكست تبعها أحمد، أحمد النيكست تبعه
26:58
Speaker A
سارة، سارة النيكست تبعها عمر، وعمر النيكست تبعه نل، فكأنه صار أنا عندي القطار مش اللينكد ليست قطار، فهي لينا تمام، أحمد، سارة، بعدين عمر، وعمر بعدين رح يأشر على النل.
27:14
Speaker A
لو أنا اجيت طبعت هنا النيم دوت فيرست، هي الليست، اسم الليست دوت الفيرست تمام، عشان أستدعي الميثود الموجودين في اللي كلاس، تمام؟ رح يرجعلي لينا.
27:27
Speaker A
ودوت لاست رح يرجعلي عمر والسايز تبعه 1 2 3 4، رح يرجعلي أربعة. هي الرن.
27:36
Speaker A
نيجي نشوف على التيرمينال. عمل ديبج، هلأ رح ينفذ الناتج، لينا عمر و حجمهم أربعة، تمام؟ وهذه هي فكرة ال ال سينجلي لينكد ليست، هي هي فكرة السينجلي لينكد ليست.
27:54
Speaker A
هي الميثود اللي عرفناهم هي الميثود ال ال الأساسية الموجودين، اللي هو السايز وإز إمتي، بيوضحولي عن الكرنت ليست ستيت، هل هم فاضيين أو لا، قديش الحجم تبعها وغيره.
28:05
Speaker A
فيرست تو لاست بيرجعولي ال ال إليمنت بدون ما يحذفوه، بيرجعوا العنصر بدون ما أنا أحذفه.
28:12
Speaker A
أد فيرست تو أد لاست بياخدوا إليمنت طبعًا، معناها أنا رح أعمل إضافة العنصر في الأول أو في آخر الليست، ريموف فيرست بيحذف العنصر طبعًا من الآخر.
28:27
Speaker A
طبعًا إذا ال ال فيرست واللاست أو ريموف فيرست استدعيتهم وكانت الليست تبعتي فارغة، رح يرجعولي نل، تمام؟ ليش؟ لأنه أنا في البداية في السينجلي في السينجلي لينكد ليست لما عرفت ال ال الهيد والتيل، تمام؟ وال كنل فخلاص، فيش إشي ثاني، لو أنا اجيت مثلًا
28:48
Speaker A
طبعت هنا لو أنا هذا الكلام تمام, عملتله كومنت, خليني ارجع اعمل رن نل, نل, زيرو, هي, ال, الفيرست تبعي اللي هو رح يرجع الهيد, والهيد انا عرفتها كنل والتيل اللي هو النيم دوت لاست, معناها رح يرجع التيل, والتيل انا في ال, عرفته كنل لانه
29:13
Speaker A
ما في انا عندي لسا عناصر, والسايز زيرو, هان هو الانيشال ستيت تبعت السنجلي لينكيد ليست, الانيشال ستيت للسنجلي لينكيد ليست, تمام منكون هيك احنا ان شاء الله خلصنا اول جزء من المعمل, ان شاء الله الجزء التاني رح نحكي عن السيرك, السيركيولر لينكيد ليست,
29:31
Speaker A
والدبلي لينكيد ليست ورح ناخد, هيك يعني توضيح بسيط, وعملي, ونوضح لكم باقي المعمل, ان شاء الله رب العالمين
Topics:Linked Listهياكل البياناتNodeHeadTailجافاSingly Linked ListالخوارزمياتArrayمعمل

Get More with the SozAI App

Transcribe recordings, audio files, and YouTube videos — with AI summaries and speaker detection. 30 minutes free.

Or transcribe another YouTube video here →