بناء الحلقات المتسلسلة أحادية الاتجاه

السلام عليكم
اليوم درسنا يحتاج إلى بعض التركيز
فعلى متابعي الأخبار التنحي جانباً
وقد أعذر من أنذر
تعالوا نركز قليلاً على العقد nodes
العقدة تحتوي على كائن من أي نوع
بالإضافة إلى مؤشر referance على العقدة التي تليها
هذا المؤشر يمثل الرابط link بين العقدتين
في مثال السيارات يمثل المسافة الفاصلة بين السيارة والتي تليها
جيد أصبح بإمكننا أن نبني الفئة class عقدة

ماذا يجب أن يتوفر في الفئة عقدة؟
1- الكائن الهدف في العقدة
2- رابط بين العقدة والعقدة التي تليها
3- صانع كائنات أو أكثر
3- أي إضافات أخرى مثل الدوال خذ وهات set & get methods

أنا قمت ببناء العقدة الخاصة بي على النحو التالي

package SinglyLinkedList;/** 

 * هذه الفئة تعمل كعقدة في سلسلة 

 * بالنسبة لحرف الـ 

 * SNode في S 

 * فهو يرمز إلى كونها أحادية الاتجاه 

 * @author Alaa AL-Salhi 

 * @version 1.0 

 */ 

public class SNode  { 

 private SNode next; 

 private Object element; 

public SNode(Object element, SNode next) { 

 	this.next=next; 

 	this.element=element; 

 } 

public void setNext(SNode next){ 

 	this.next=next; 

 } 

 public void setElement(Object o){ 

 	this.element=o; 

 } 

 public Object getElement(){ 

 	return element; 

 } 

 public SNode getNext(){ 

 	return next; 

 } 

}

بعد أن قمنا ببناء الفئة عقدة ننتقل إلى الفئة التي ستقوم بإدارة العمليات على السلسلة
هذه الفئة تحتاج إلى التالي
1- أول عنصر في السلسلة
2- صانع كائنات
3- دوال الإضافة والحذف
أنا قمت ببناء الفئة SinglyLinkedList الخاصة بي

package SinglyLinkedList; 

/** 

 * @author Alaa AL-Salhi 

 * @version 1.0 

 */public class SinglyLinkedList { 

 private SNode head; 

 public SinglyLinkedList(){ 

 	head=null; 

 } 

 public SinglyLinkedList(Object element){ 

 	head=new SNode(element,null); 

 } 

 public SNode getFirst(){ 

 	return head; 

 } 

 public void addFirst(Object element){ 

 	SNode newNode=new SNode(element,head); 

 	head=newNode; 

 } 

 public Object deleteFirst(){ 

 	Object temp=head.getElement(); 

 	head=head.getNext(); 

 	return temp; 

 } 

 public void addLast(Object element){ 

 	SNode newNode=new SNode(element,null); 

 	SNode temp=head; 

 	while(temp.getNext()!=null){ 

 		temp=temp.getNext(); 

 	} 

 	temp.setNext(newNode); 

 } 

 public static void main(String args[]){ 

 	SinglyLinkedList list=new SinglyLinkedList(); 

 	for(int i=0;i<10;i++) 

 		list.addFirst(new Integer(i)); 

 	for(int i=0;i<5;i++) 

 		list.deleteFirst(); 

 	SNode temp=list.getFirst(); 

 	for(int i=0;i<5;i++){ 

 		System.out.println((Integer)temp.getElement()); 

 		temp=temp.getNext(); 

 	} 

 } 

}

لاحظوا أن لكل تركيب من تراكيب البيانات مفتاح نستطيع من خلاله التعامل مع التركيب
في المصفوفة مثلاً المفتاح هو اسم المصفوفة مع ترتيب العنصر في المصفوفة
المفتاح في حالة الحلقات المتسلسلة أحادية الاتجاه هو أول عنصر في السلسلة
لهذا جميع الدول في الأغلب تبدأ منها
تعالوا نشرح ما قنا به للتو
نبدأ بالدالة أضف في بداية السلسلة (addFirst)
كل ما علينا فعله هو أن نستبدل أول عنصر في السلسلة بالعنصر الجديد
ونضع رابطة بين العنصرين
هذه الدالة تأخذ كائن
لماذا قلنا أنها تأخذ كائن لماذا لا تأخذ أي شيء آخر
لو خصصت أنا نوع الكائن مثلاُ لنقل عدد صحيح Integer لأصبح عندي سلسلة من الأعداد الصحيحة فقط
ماذا لو أردت أن أعمل سلسلة من الجمل String فإني سأضطر إلى بناء فئة جديدة
بصراحة نحن هنا نعتمد على تعدد الكائنات polymophisem لكي نعيد استخدام نفس الفئة عدة مرات

دالة أضف في النهاية (addLast)
نحن لا نملك إلا العنصر الأول
لهذا نبدأ منه
هنا نسأل أنفسنا
ما الميزة التي تميز العنصر الأخير في السلسلة؟
الجواب: أن العنصر الذي يليه يجب أن يكون null
لهذا سنبحث عنه باستخدام القفز Hoping بمعنى أني سأنتقل من عقدة إلى أخرى إلى أن أجد هذا العنصر
على العموم لدي مشكلة bug في هذه الدالة لن أقوم بتوضيحه هذه المرة
اعتبروه سؤال تفكير بسيط
لاتقلقوا سنقوم بتطوير هذه الفئة حتى نحصل على فئة شبه رائعة

أنا أنهيت درس هذا الأسبوع

تحياتي

22 تعليق to “بناء الحلقات المتسلسلة أحادية الاتجاه”

  1. يقول LuLu:

    السلام عليكم
    يعطيك العافية أخي علاء 🙂

    بصراحة مالقيت مكان تاني
    حابين نتابع معك في هالمدونة وبالأحرى في قسم التراكيب
    ونتمنى انو تكون زيارتنا خفيفة عليكم 🙂

    بارك الله فيك
    صلو على النبي

  2. يقول admin:

    وعليكم السلام

    على الرحب والسعة بكم دائماً
    لي مدة أحاول أن أكتب لكم
    لكني أعاني من شح في الوقت
    هل هناك موضوع معين تقترحيه علي؟؟؟
    بالطبع خفيفة ماذا كنتي تظنين
    وإن لم تكن خفيفة فهي مرغوبة 🙂

    تحياتي

  3. يقول LuLu:

    بارك الله فيك
    الكل مضغوط هالايام والحمد لله على كل حال…
    وان شا الله مش حنتقل عليك

    بصراحة حاليا في عنا اسايمنت
    بدنا نعمل كود باستخدام الstack نحول فيه ال infix expr. إلى postfix
    بصراحة مافكرنا فيه لسا لانو عنا كويزين يوم الاحد

    بس ان شا الله بنتمنى انك يعني تعطينا كفكرة كيف ممكن نبدا فيه

    صحيح…شو تعريب كلمة stack ؟ 🙂
    وبارك الله فيك
    اللهم صل على سيدنا محمد …

  4. يقول funny lady:

    السلام عليكم
    ماشاء الله اخ علاء المدونه اكتر من رائعه انا كنت افوت عليها واقرأ دايماً
    المدونه اكتر من رائعه
    حبيت بس نكمل معك في شرح التراكيب وان شاء الله يارب نكون مطيعين وما بدنا فلكه هههه
    ربنا معك

  5. يقول admin:

    مرحبا فيكي LuLu
    بحاول أكتبلكم شرح بسيط عن stack
    طيب أقولك حاجة فكري وقولي لوين وصلتي
    وبساعدك بإذن الله

    بالنسبة لتعريب stack
    ممكن تحزري 🙂

  6. يقول admin:

    كيف حالك funny lady
    نورت المدونة لما قرتيها يا ختي
    ما تخافيش بضربيش البنات الشاطرة
    بس بخوفهم 😛

  7. يقول LuLu:

    السلام عليكم
    بالنسبة لل stack شفت معناها في القاموس لقيت مكتوب يكدّس وكمان شوية معاني
    بس سألت اختي اللي بتاني ثانوي علمي طلعو بياخدوهم
    ومعناها مكدسة او مرصوصة :l
    شو هادا لسا استاك ارحم :S

    يلا ان شا الله يوم الاحد بنفضى للتراكيب
    موفقين
    صلو على خير الأنام 🙂

  8. يقول admin:

    بالضبط معناها مكدس
    من فعل كدس إذا وضع الشيء فوق الشيء
    ويقال يكدس المال إذا جمعه بعضه فوق بعض
    البعض يترجمها على أنها المركم
    من تراكم الشيء
    على العموم أنا أفضل المكدس

    ربنا يعينكم
    أنا كتبت مقالة عن المكدس
    لكن بدها مراجعة
    إن شاء الله بكرة بنشرها

    تحياتي

  9. يقول Noor:

    مرحبا علاء
    شكرا على شرحك وانا فهمت عليك بس الي مافهمته هو “3- صانع كائنات أو أكثر””
    شنو كائنات تقصد بيها؟؟؟
    وعندي طلب ثاني واسفة على التعب هو ممكن ان تنزل امثلة لتراكيب بيانات اكثر
    اذا بالوقت الحالي ما تقدر خليها وقت ثاني لان انا مامستعجلة عليها

  10. يقول admin:

    الكائنات هي المرادف للكلمة الإنجليزية object
    صانع الكائنات المرادف للكلمة الإنجليزية constructor

    بالنسبة للأمثلة
    هل لديك نقطة معينة؟
    تريدين فهمها
    أو الحصول على معلومات إضافية فيها؟

    تحياتي

  11. يقول Noor:

    شكرا علا
    بالنسبة للامثلة اي امثلة تخص التراكيب

  12. يقول admin:

    أتمنى أن تمهيليني بعض الوقت أخت نور
    وسأحاول أن أتناول مواضيع أخرى
    غير التي طرحتها هنا في المدونة

    تحياتي

  13. يقول RaWaN:

    السلام عليكم …
    لو سمحت سؤال …
    على اي لغة تكتب الكود ….
    بصراحة انا آخذ حالياً المادة و نتعامل مع لغة ++C لا اعلم لكني شعرت باختلاف في بعض الاشياء …

    اضافة الى انني اتمنى منك في الدروس اللاحقة استخدام الكلمات الانجليزية اضافة الى التعريب …
    يعني مثلاً صانع الكائنات … طولت كتير حتى فهمت انه هي نفسها constuctor !!! مجرد ملاحظة ….

    الله يعطيك العافية ….

    شكراً لك

  14. يقول admin:

    هذه الدروس مكتوبة بلغة جافا
    سأحاول بإذن الله أن أقوم بكتابة المصطلحات باللغة الإنجليزية
    لكي يسهل على القارئ الربط بينها وبين ما تعلمه في الجامعة

    تحياتي

  15. يقول شكرا:

    جزاك الله خير الجزاء ..

  16. يقول admin:

    العفو

    تحياتي

  17. يقول الشيفرة:

    بارك الله فيك مهندس علاء
    دخلت مدونتك بسبب مشاكل عندي في مادة الديتا استركشر خصوصًا اللينكد لست
    بس خسارة أحتاجها مشروحة باستخدام الـ c++
    عمومًا شكرًا كثير , راح أضيف مدونتك للمفضلة لأنو الحين بندرس لغة جافا كمان 🙂

  18. يقول admin:

    ربما لن تفهم الشيفرة جيداً لكنك ستجد المحتوى مفيداً
    أتمنى لك التوفيق

  19. يقول دلع العموش:

    مرحبا علاء انا بدرس هندسة برمجيات وطلب من الدكتور اسايمنت عن الRadix sort
    ولو تساعدني شوي في وعندب كم من الاسئلة

  20. يقول admin:

    تفضلي اسألي

  21. يقول دلع العموش:

    السؤال سألني بهاد السطر من الكود
    ;int rshift = 0
    } for (int mask = ~(-1 << bits); mask != 0; mask <<= bits, rshift += bits)
    شكرا

Leave a Reply for admin