المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : list Links


صعب المنال
04-28-2008, 12:33 PM
السلام عليكم

هل الجميع هنا؟
هل من أحد ناقص؟
نادوا الجميع فلست أحب أن أعيد ما أقول
تعلمون أن الكسل شيء أساسي في حياتي

اقتربوا جميعاً فسأحكي لكم قصة مسلية
تسهل علينا فهم التركيب الخاص بالحلقات
كان يا مكان في قديم العصر وسالف الأوان
شيخ عجوز أكل عليه الدهر وشرب
أقعده المرض في الفراش
وسلبه السمع والبصر
فلما اقترب أجله
جمع أولاده إليه
وقال يا أبنائي ما الحياة؟
قال أحدهم المتعة
وقال آخر المال
وقال ثالث المنصب
لكن الأب نظر لهم بتمعن
وقال ائتوني بحبل
فجاؤه بالحبل
أخذ الأب يعقد العقدة تلو العقدة
ويترك بينهم مسافات
حتى انتهى الحبل
فلما انتهى قال هل ترون ماذا حل بالحبل
قالوا نعم أصبح مليئاً بالعقد
فقال الحياة مثلها مثل هذا الحبل
والعقد الأعمال الكبيرة التي تقوم بها
والوصلات بين كل عقدة والأخرى هو الزمن الضائع
فاعملوا على أن تملؤوا حبالكم بالعقد
بالطبع مات الرجل وانتهت القصة
الشاهد من القصة (والتي قد قمت بتأليفها للتو) في موضوعنا
الحلقات المتسلسلة تعتمد على نفس المفهوم
لدينا مجموعة من الحلقات موضوعة في سلسلة
نضع عقدة node ثم نضع وصلة link ثم نضع عقدة وهكذا
فإذا قطعنا الوصلة بين السلسلة والعقدة الأولى أو الأخيرة
وباقي سلسلة العقد فنحن قد قمنا بحذف هذه العقدة
وإذا أردنا أضافة عقدة جديدة في البداية أو النهاية
فستقوم بوضع وصلة جديدة تربط بين العقدة الأولى أو الأخيرة القديمة والعقدة الجديدة

أنواع الحلقات المتسلسلة:
الحلقة المتسلسلة أحادية الاتجاه
الحلقة المتسلسلة ثنائية الاتجاه
النوع الأول:الحلقات المتسلسلة أحادية الاتجاه
هذا النوع تتميز روابطه link بأنها في اتجاه واحد
بمعنى أن الطريق الذي تذهب منه لا يمكنك الرجعة منه
نمثل الرابطة في هذا النوع بهذا الشكل –>
بالتالي ممكن أن نشبها بخط سريع في اتجاه واحد
بالنسبة للعقد في المثال تتمثل في السيارات التي تسير في هذا الخط

مثال:

في البرمجة تكون السلسلة كالتالي
بداية السلسلة –> عقدة رقم 1 –> عقدة رقم 2 –> … –> عقدة رقم ن –> نهاية السلسلة

قد حصلت على صورة من محرك البحث جوجل في هذا الامر
سادرجها لكم
تشرح الفكرا

يبدو اني قد اضعتها

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


الله معكم..

صعب المنال
04-29-2008, 08:23 AM
كيف أحوالكم يا شباب
إن شاء الله بخير
اليوم سينضم إلى فصلنا شخصية جديدة فأرجوا أن ترحبوا به..اسمه عبده أحياناً بناديه عبود
على العموم الأخ عبده شخصية عرضية comparese..(الشخصية العرضية أسلوب أدبي يحاول تلطيف المقالات العلمية)..ممكن أن تروه في أي مكان..مؤدب وشاطر وبيسمع الكلام
أتمنى أن تعاملوه بشكل جيد لأنه ممكن يزعل بسرعة..وساعتها ما تقولوا إني ما قولتلكم أنه بيزعل..بعد أن تم التعارف بينكم
نبدأ ما توقفنا عنده

بس ملاحظة صغيرة ..موضوعي ما الو اي علاقة بدرس الخوارزميات من قريب..
لكن من بعيد له علاقة في فهم طريقة انشاء الــtemplat ..او ما نسميها packeg
الموضوع لايصال الفكرا وهوا مجرد "بحث شخصي لي عن طريق الجافا لكي افهم محاظرة اللخوارزميات" وتطور هذا البحث لكي يصل الى سي شارب ..يعني مجرد خواطر لي عشان تفيدكم ...
خاطرتي تحتاج الى تركيز ..لفهم الفكرا...فعلى متابعي الأخبار التنحي جانباً
وقد أعذر من أنذر...تعالوا نركز قليلاً على العقد nodes
العقدة تحتوي على كائن من أي نوع...بالإضافة إلى مؤشر referance على العقدة التي تليها
هذا المؤشر يمثل الرابط link بين العقدتين
جيد أصبح بإمكننا أن نبني الفئة class عقدة
ماذا يجب أن يتوفر في الفئة عقدة؟
1- الكائن الهدف في العقدة
2- رابط بين العقدة والعقدة التي تليها
3- صانع كائنات أو أكثر(فزلكتي الخاصة في اسم التابع البناء)
3- أي إضافات أخرى مثل الدوال خذ وهات set & get methods

أنا قمت ببناء العقدة الخاصة بي على النحو التالي
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SinglyLinkedList
{
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 الخاصة بي


public class SinglyLinkedList {

private SNode head;

public SinglyLinkedList(){

head=null;

}

public SinglyLinkedList(Object element){

SNode 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);

}


}

static void Main(string[] args)
{
SinglyLinkedList list=new SinglyLinkedList();

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

list.addFirst(new Convert (i));

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

list.deleteFirst((int)(i));

SNode temp=list.getFirst();

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

Console.WriteLine((int)temp.getElement());

temp=temp.getNext();

}



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

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

لن اكمل الموضوع لانه مجرد خاطرة مرت على بالي لا اكثر... ومن اجل فهم المحاظرة كما قلت لكم

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

شكرا لحسن الاستماع ..
يلا مشي معي يا عبدو ..

الله معكم..