السلام عليكم
اليوم درسنا يحتاج إلى بعض التركيز
فعلى متابعي الأخبار التنحي جانباً
وقد أعذر من أنذر
تعالوا نركز قليلاً على العقد 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 في هذه الدالة لن أقوم بتوضيحه هذه المرة
اعتبروه سؤال تفكير بسيط
لاتقلقوا سنقوم بتطوير هذه الفئة حتى نحصل على فئة شبه رائعة
أنا أنهيت درس هذا الأسبوع
تحياتي
السلام عليكم
يعطيك العافية أخي علاء 🙂
بصراحة مالقيت مكان تاني
حابين نتابع معك في هالمدونة وبالأحرى في قسم التراكيب
ونتمنى انو تكون زيارتنا خفيفة عليكم 🙂
بارك الله فيك
صلو على النبي
وعليكم السلام
على الرحب والسعة بكم دائماً
لي مدة أحاول أن أكتب لكم
لكني أعاني من شح في الوقت
هل هناك موضوع معين تقترحيه علي؟؟؟
بالطبع خفيفة ماذا كنتي تظنين
وإن لم تكن خفيفة فهي مرغوبة 🙂
تحياتي
بارك الله فيك
الكل مضغوط هالايام والحمد لله على كل حال…
وان شا الله مش حنتقل عليك
بصراحة حاليا في عنا اسايمنت
بدنا نعمل كود باستخدام الstack نحول فيه ال infix expr. إلى postfix
بصراحة مافكرنا فيه لسا لانو عنا كويزين يوم الاحد
بس ان شا الله بنتمنى انك يعني تعطينا كفكرة كيف ممكن نبدا فيه
صحيح…شو تعريب كلمة stack ؟ 🙂
وبارك الله فيك
اللهم صل على سيدنا محمد …
السلام عليكم
ماشاء الله اخ علاء المدونه اكتر من رائعه انا كنت افوت عليها واقرأ دايماً
المدونه اكتر من رائعه
حبيت بس نكمل معك في شرح التراكيب وان شاء الله يارب نكون مطيعين وما بدنا فلكه هههه
ربنا معك
مرحبا فيكي LuLu
بحاول أكتبلكم شرح بسيط عن stack
طيب أقولك حاجة فكري وقولي لوين وصلتي
وبساعدك بإذن الله
بالنسبة لتعريب stack
ممكن تحزري 🙂
كيف حالك funny lady
نورت المدونة لما قرتيها يا ختي
ما تخافيش بضربيش البنات الشاطرة
بس بخوفهم 😛
السلام عليكم
بالنسبة لل stack شفت معناها في القاموس لقيت مكتوب يكدّس وكمان شوية معاني
بس سألت اختي اللي بتاني ثانوي علمي طلعو بياخدوهم
ومعناها مكدسة او مرصوصة :l
شو هادا لسا استاك ارحم :S
يلا ان شا الله يوم الاحد بنفضى للتراكيب
موفقين
صلو على خير الأنام 🙂
بالضبط معناها مكدس
من فعل كدس إذا وضع الشيء فوق الشيء
ويقال يكدس المال إذا جمعه بعضه فوق بعض
البعض يترجمها على أنها المركم
من تراكم الشيء
على العموم أنا أفضل المكدس
ربنا يعينكم
أنا كتبت مقالة عن المكدس
لكن بدها مراجعة
إن شاء الله بكرة بنشرها
تحياتي
مرحبا علاء
شكرا على شرحك وانا فهمت عليك بس الي مافهمته هو “3- صانع كائنات أو أكثر””
شنو كائنات تقصد بيها؟؟؟
وعندي طلب ثاني واسفة على التعب هو ممكن ان تنزل امثلة لتراكيب بيانات اكثر
اذا بالوقت الحالي ما تقدر خليها وقت ثاني لان انا مامستعجلة عليها
الكائنات هي المرادف للكلمة الإنجليزية object
صانع الكائنات المرادف للكلمة الإنجليزية constructor
بالنسبة للأمثلة
هل لديك نقطة معينة؟
تريدين فهمها
أو الحصول على معلومات إضافية فيها؟
تحياتي
شكرا علا
بالنسبة للامثلة اي امثلة تخص التراكيب
أتمنى أن تمهيليني بعض الوقت أخت نور
وسأحاول أن أتناول مواضيع أخرى
غير التي طرحتها هنا في المدونة
تحياتي
شكرا علاء
السلام عليكم …
لو سمحت سؤال …
على اي لغة تكتب الكود ….
بصراحة انا آخذ حالياً المادة و نتعامل مع لغة ++C لا اعلم لكني شعرت باختلاف في بعض الاشياء …
اضافة الى انني اتمنى منك في الدروس اللاحقة استخدام الكلمات الانجليزية اضافة الى التعريب …
يعني مثلاً صانع الكائنات … طولت كتير حتى فهمت انه هي نفسها constuctor !!! مجرد ملاحظة ….
الله يعطيك العافية ….
شكراً لك
هذه الدروس مكتوبة بلغة جافا
سأحاول بإذن الله أن أقوم بكتابة المصطلحات باللغة الإنجليزية
لكي يسهل على القارئ الربط بينها وبين ما تعلمه في الجامعة
تحياتي
جزاك الله خير الجزاء ..
العفو
تحياتي
بارك الله فيك مهندس علاء
دخلت مدونتك بسبب مشاكل عندي في مادة الديتا استركشر خصوصًا اللينكد لست
بس خسارة أحتاجها مشروحة باستخدام الـ c++
عمومًا شكرًا كثير , راح أضيف مدونتك للمفضلة لأنو الحين بندرس لغة جافا كمان 🙂
ربما لن تفهم الشيفرة جيداً لكنك ستجد المحتوى مفيداً
أتمنى لك التوفيق
مرحبا علاء انا بدرس هندسة برمجيات وطلب من الدكتور اسايمنت عن الRadix sort
ولو تساعدني شوي في وعندب كم من الاسئلة
تفضلي اسألي
السؤال سألني بهاد السطر من الكود
;int rshift = 0
} for (int mask = ~(-1 << bits); mask != 0; mask <<= bits, rshift += bits)
شكرا