تراكيب البيانات
Download
Report
Transcript تراكيب البيانات
قسم علوم الحاسوب و تكنولوجيا المعلومات
تخصص دبلوم البرمجيات و قواعد البيانات
تراكيب البيانات
الوحدة الخامســة
هيكل البيانات Linked List
المادة العلمية إعداد
http://mfarra.cst.ps
الفـــرا
أ .محمود رفيق
َّ
الفـــرا
مدرس المساق /أ .محمود رفيق
َّ
2010-2011
محاور المحاضرة
2
األصناف ذاتيـة المرجعيـة
ما هي القوائم المترابطـة؟ ()Linked List
إضافة عناصر في البداية
حذف عناصر من البداية
إضافة عناصر في النهاية
حذف عناصر من النهاية
إضافة عناصر في موضع ما
حذف عناصر من موضع ما
طباعة عناصر القائمة
ترتيب عناصر القائمة
البحث عن عنصر ما في القائمة
مساق تراكيب البيانات
Self- Referential class
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
بذكرك ربنـا نحيــا
3
الذكر لمن خرج من البيت
بسمملاله ,توكلممعلىل م لهلو اللحممو لو اللقمموإلالاللب م هلل ,الللهمملال
ل
ل
الن ممعلالى ممو لبم م لالُلال لالولال للالولالل مل مملالالولاللل مملالالولال ه ممولالول
يجهولىلعل.
ْ
عن أم سلمة رضي هللا عنها قالت ( :ما خرج النبي صلى هللا عليه وسللم ملن بيتلي قلط
إال رفللع طرفلله إلللى السللمال فقللال اللهللم أعللوذ بللك أن أضللل أو أضللل أو أ ل أو أ ل أو
صحيح أبو داود و صححه األلباني
أظلم أو أظلم أو أجهل أو يجهل علي )
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
األصناف ذاتيـة المرجعيـة
Self- Referential class
4
األصناف ذاتيـة المرجعيـة هي أصناف تحتلو عللى كائنلات م لتقة ملن
الصنف ذاته.
و هللي تسللتخدم لللربط الكائنللات بعضللها بعضللا لبنللال العديللد مللن هياكللل
البيانات ,و التي سندرس بعضـا منها هذا الفصل إن ال هللا.
الكائن nextتم اشتقاقه
من الصنف nodeداخل
الصنف Nodeذاته
{ class Node
;private int data
;private Node next
) public Node( int d
{
// some code
} }
ما هي القوائم المترابطـة؟
()Linked List
5
القوائم المترابطة ( )Linked Listهي أحد هياكل البيانات التلي تمكننلا ملن
إن ال قائمة قابلة للحذف و اإلضافة و التعديل و البحلث و الترتيلب,
مع األخذ بعين االعتبار َّ
أن حجمها غير ثابت (. )Dynamic data structure
هلللذل القائملللة يلللتم تطبيقهلللا اعتملللادا عللللى مفهلللوم األصلللناف ذاتيلللة
المرجعية ,و بالتلالي نلتمكن ملن اللتحكم فلي عناصلرها بحريلة أكبلر
من التعامل مع عناصر المصفوفة.
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
ما هي عناصر القائمة؟
6
القائمة تتكون من مجموعة من الكائنات الم تقة من صنف محدد.
هذل العناصر يتم تمثيلها بصنف يحاكي ما نود تطبيقه ,و مثال ذلك/
القائمللة المترابطللة لصللنف المللوظفين تحتللو علللى مللوظفين ,و بالتللالي
فعناصر القائمة هي كائنات م تقة من الصنف موظلف ,و هلذل الكائنلات
تمثل الموظفين و بياناتهم.
....
حسام
35سنة
رئيس قسم
مساق تراكيب البيانات
محمد
30سنة
محلل نظم
أحمد
25سنة
مبرمج
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
تطبيق قائمة مترابطـة من السيارات
7
3
الصنف
Car system
هذذذذذذا الصذذذذذنف يسذذذذذتخدم
للتعامل مع القائمة ,حيذث
يذذذذتم ءنشذذذذان كذذذذائن مذذذذن
الصذذذنف Car Listثذذذم
نستخدم العمليات المتاحة
لإلضذذذذذذافة و الحذذذذذذذف و
غير ذلك ...
مساق تراكيب البيانات
هذا الصنف يحذاك القائمذة,
و يطلق عليذه اسذم (المذدير)
حيث من خالله تتذوفر دوال
الحذذذذذذذذذذذذف و اإلضذذذذذذذذذذذافة و
الترتيذذذذذب و غيذذذذذر ذلذذذذذك ,و
تسذذذذتخدم هذذذذذ الذذذذدوال مذذذذن
خالل الصنف Car System
الصنف
ListCar
2
1
الصنف
Car
هذذذذذذذا الصذذذذذذنف يحذذذذذذاك
السذذيارات و هذذو يحتذذو
على جملذة لتعريذف كذائن
مذذن الصذذنف ذاتذذه ,و فيذذه
يذذتم تمثيذذل البيانذذات الت ذ
تعبر عن هيئة الصنف.
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
بنال صنف يحاكي السيارات
8
1. class Car
2.
{
3.
public int id;
4.
public String location;
5.
public String type;
6.
public Car next;
7.
public Car()
8.
{
9.
id = 0;
10.
location = "Gaza";
11.
type = "Private";
12.
}
13. }
الفــرا
محمود رفيق. أ/المادة العلمية إعداد
َّ
مساق تراكيب البيانات
بنال صنف يحاكي قائمة السيارات
9
1. class ListCar
2.
{
3.
متغير يرصد عدد عناصر القائمة private int lenght ; //
4.
كائن من نوع الصنف الرئيس سيستخدم لمعرفة بداية القائمة public Car head; //
5.
)(public ListCar
6.
{
7.
;lenght = 0
8.
ف البداية هذا المؤشر يشير ءلى ال ش ن حيث ال يوجد عناصر ف القائمة head = null; //
9.
}
10.
هنا يتم إضافة دوال الحذف و اإلضافة و غير ذلك //
} 11.
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
ا تقاق كائن من قائمة السيارات
10
)static void Main(string[] args
{
;)(ListCar list1 = new ListCar
}
هذا الصنف بعد ذلك سيتم من خالله ا تقاق ثم استخدام القائمة
list1و ما فيها من إمكانيات (دوال و متغيرات) مثل الحذف و
اإلضافة و الترتيب و غير ذلك ,مع االنتبال إلى َّ
أن هذل اإلمكانيات
تم برمجتها و تجهي ها تماما داخل صنف القائمة.
فيما يلي إن ال هللا سيتم البدل في برمجة و رح هذل الدوال ...
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
1.
2.
3.
4.
أ كركم
11
السؤال مفتاح للعلوم كلها...
تذكر أن نيوتن عندما سأل لماذا وقعت التفاحـة وصل إلى قوانين الجاذبيــة ...
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
بذكرك ربنـا نحيــا
12
الذكر لمن عاد إلى البيت
الللهمملال! النممعلالل م ل لمومم،لالليممولخلجلومومم،لاللي مم ،لجلبسمملا هل
ولجنم لجلوبسمملالهلم ،نم لجلوىلم لهللبنم لتوكلنم لجلثمملاللوسممللال
ىل لالهله
ْ
عن أبي موسى األ عر أن رسول هللا صلى هللا عليه وسلم قال( :إذا ولج الرجلل بيتله
؛ فليقل :اللهم ! إني أسألك خيلر الملولج و وخيلر المخلرج و بسلم هللا ولجنلا و وبسلم هللا
خرجنا و وعلى هللا ربنا توكلنا و ثم ليسلم على أهله )
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
إضافة عنصر للقائمة في البداية
.1
.2
إلضافة عنصر في بداية القائمة ,كل ما نحتاج له معرفة الحقيقة
المتعلقة بالمؤ ـر Headو هي أنه يجب أن ي ير دائما إلى أول
عنصر في القائمة ,و بالتالي فنحن إذا أردنا أن نضيف عنصر في
البداية علينا فعل ما يلي:
نجعل مؤ ر nextللعنصر الجديد ي ير إلى ما ي ير له المؤ ر
headو هو ي ير للعنصر األول.
نجعل المؤ ر headي ير إلى العنصر الجديد
Data n
null
…..
Data 3
Data 2
Head
Data 1
1
New
data
2
إضافة عنصر إلى بداية القائمة
14
{ 1. class ListCar
2.
متغير يرصد عدد عناصر القائمة private int lenght ; //
3.
كائن من نوع الصنف الرئيس سيستخدم لمعرفة بداية القائمة public Car head; //
4.
{ )(public ListCar
5.
;lenght = 0
6.
ف البداية هذا المؤشر يشير ءلى ال ش ن حيث ال يوجد عناصر ف القائمة head = null; } //
7.
{ )public void addAtFront(Car inserted
8.
;)(Car newc = new Car
• ف السذطر 8تذم ءشذتقاق كذائن جديذد مذن النذوع
9.
;newc = inserted
Carليتم مساواته بالكائن المرسل للدالة إلضافته.
10.
;newc.next = head
• ف السذطر 10أشذار الكذائن الجديذد للكذائن ا ول
11.
;lenght++
ف القائمة
• فذذذ السذذذطر 12أشذذذار المؤشذذذر headللعنصذذذر
12.
} ;head = newc
الجديد
} 13.
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
إضافة عنصر للقائمة في النهايـة
العنصر األخير في القائمة ,دائما ما ي ير إلى القيمة ال يل ,null
و هذا العنصر ال يوجد مؤ ر ي ير له باستمرار ,و بالتالي عندما
نحتاج إلى التعامل معه كإضافة أو حذف أو بحث البد أن نستحدث
مؤ ر جديد نجعله ي ير له.
كيف يحدث هذا و نحن ال نعرف من هو العنصر األخير ؟
يتم هذا دائما من خالل جعل المؤ ر المستحدث ي ير في البداية
للعنصر األول ثم من خالل تكرار ما ينتقل يئا ف يئا حتى ي ير
للعنصر الجديد.
عندها نجعل مؤ ر العنصر األخير ي ير للعنصر الجديد.
و نجعل مؤ ر العنصر الجديد ي ير إلى القيمة .null
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
إضافة عنصر للقائمة في النهايـة
التكلللرار اللللذ نسلللتخدمه للوصلللول بالمؤ لللر المسلللتحدث للعنصلللر
األخير يعتمد على صلحة لرط واحلد هلو ()back.next != null
و هللو يعنللي طالمللا أن التللالي للعنصللر الحللالي ال يعتبللر القيمللة Null
يمكنك االستمرار في التكرار ,بينما إن كان التالي يساو قيمة null
فهذا يعني أننا وصلنا للعنصر األخير و بالتالي يتوقف التكرار.
2
×
null
Front
Back
Data n
3
1
New
data
…..
Data 3
Data 2
Data 1
إضافة عنصر للقائمة في النهاية
17
{ 1. class ListCar
2.
….
3.
{ )public void addAtFront(Car inserted
4.
} …
{ )5. public void addAtback(Car inserted
6.
;)(Car newc = new Car
7.
;Car back = head
• فذ السذذطر 8تذذم وضذذع شذذرط التكذذرار للوصذذول
للعنصر ا خير.
8.
)while (back.next != null
•ف السذطر 9يذتم تحريذك المؤشذر backخطذو
9.
;back = back.next
خطو .
10.
;back.next = newc
•فذذذذ السذذذذطر 10نجعذذذذل مؤشذذذذر التذذذذال الخذذذذا
بالعنصر الذ يشذير لذه backيشذير ءلذى العنصذر
11.
;newc.next = null
الجديد.
12.
;length ++
•ف السطر 11نجعل التال للعنصر ا خيذر يشذير
للقيمة null
13.
}
الفــرا14.
المادة العلمية إعداد /أ .محمود}رفيق
مساق تراكيب البيانات
َّ
حذف عنصر من بداية القائمة
حذف العناصر من القائمة يعني باختصار إلغال المؤ رات
(المتغيرات) التي ت ير إليه ,مع استمرار اتصال القائمة.
بالتالي ,لحذف العنصر األول في القائمة ,كل ما نحتاجه أن نجعل
المتغير(المؤ ر) Headي ير إلى العنصر التالي.
X
Head
Data n
…..
Data 3
Data 2
Data 1
null
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
حذف عنصر من بداية القائمة
19
{ 1. class ListCar
2.
….
{ )3. public void addAtFront(Car inserted
4.
} …
{ )5. public void addAtback(Car inserted
6.
}…
)(7. public void RemoveFromFront
{ 8.
• ف ذ السذذطر 9تذذم تحريذذك المؤشذذر Headليشذذير
9.
;head = head.next
للعنصر التال بدال من االول.
10.
;lenght--
• فذ السذذطر 10تذذم تقليذذل طذذول القائمذذة الننذذا قمنذا
} 11.
بحذف عنصر
} 12.
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
حذف عنصر من نهايـة القائمة
حللذف العناصللر مللن نهايللـة القائمللة نحتللاج فيلله إلللى الوصللول إلللى
العنصر قبل األخير ,ذلك لنجعلل مؤ لـرل التلالي ( )nextي لير إللى
القيمة nullبدال من إ ارتها للعنصر األخير ,و بذلك يكون العنصر
األخيـر قد تم حذفـه.
Back
1
×
null
مساق تراكيب البيانات
Data n
2
current
×
Data 3
Front
…..
Data 2
Data 1
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
حذف عنصر من نهايـة القائمة
21
{ 1. class ListCar
2.
….
} … { )3. public void addAtFront(Car inserted
} … { )4. public void addAtback(Car inserted
} … { )(5. public void RemoveFromFront
{ )(6. public void RemoveFromback
• فذذذذذ السذذذذذطر 7تذذذذذم تعريذذذذذف المؤشذذذذذر
7.
;Car current = head
currentليشير ءلى ما يشذير لذه ,Head
8.
;Car back = head.next
و سيظل دائمذا متذرخر عذن المؤشذر back
9.
{ )while (back.next != null
بخطو .
• ف السطر 8تذم تعريذف المؤشذر back
10.
;back = back.next
يشير ءلى العنصر التال للعنصر current
11.
} ;current = current.next
•فذذذ ا سذذذطر 9ءلذذذى 11التكذذذرار الذذذذ
12.
;current.next = null
يسبب انتقال للمؤشرات خطو خطو حتى
نصذذذل للعنصذذذرين ا خيذذذر ( )Backو قبذذذل
13.
} ;lenght--
ا خير (.)current
}
14.ا
الفــر
رفيق
محمود
.
أ
/
إعداد
العلمية
المادة
مساق تراكيب البيانات
َّ
أ كركم
22
السؤال مفتاح للعلوم كلها...
تذكر أن نيوتن عندما سأل لماذا وقعت التفاحـة وصل إلى قوانين الجاذبيــة ...
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
بذكرك ربنـا نحيــا
23
الذكر لمن لبس الثياب
اللحيدلهلللاللذيلكسم نعلهمذاللجلو ل قنومه مم ليوم،لحمو لمنمعلوالل
قوإ
ْ
عن معاذ بن أنس الجهني رضي هللا عنه ,أن النبي صلى هللا عليه وسلم قال ( :من أكل
طعاما ثم قال :الحمد هلل الذ أطعمني هذا الطعام و و ر قنيه من غيلر حلول منلي وال
قوة و غفر له ما تقدم من ذنبه و ومن لبس ثوبا فقلال :الحملد هلل اللذ كسلاني هلذا و و
ر قنيه من غير حول مني وال قوة غفر له ما تقدم من ذنبه وما تأخر) حسنه األلباني
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
إضافة عنصر في موضع ما
إضافة العناصر ال تقتصر على البداية و النهاية ,فقلط نحتلاج أحيانلا
إلى إضافة عنصر عند موضع معين أو بعد قيمة معينه و ذللك عنلد
التعامل غالبا مع قائمة مرتبـة.
هللذل العمليللة سللتؤثر علللى عنصللرين ,حيللث أن العنصللر الللذ س ليتم
إضافته البد أن ي ير إلى تالي ,و البد لمن قبله أن ي ير إليه.
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
إضافة عنصر في موضع ما
و لإلضافة حالتين هما/
إضافة بحسب رقم الموضع مثل إضافة في الموضع الثاللث أو الرابلع و
غير ذلك ,و في هذل الحالة نحتلاج إللى إن لال علداد داخلل تكلرار يسلتمر
حتى نصل إلى ذلك الموضع.
إضلللافة بحسلللب القيملللة مثلملللا نقلللول أضلللف العنصلللر ذو القيملللة 5فلللي
الموضع المناسب ,و في هذل الحالة نحتاج إلى تكرار يعتملد عللى لرط
البحث عن أول عنصر أكبر من الرقم 5ليتم إضافة العنصر الجديد قبله
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
إضافة عنصر في موضع ما
current
Data n
null
n
…..
Data 3
2
1
×
Data 2
1
2
New
data
العنصر الجديد سيتم إضافته كعنصر ثالث في القائمة
Head
Data 1
0
إضافة عنصر بحسب عنوان الموضع
27
{ 1. class ListCar
2.
….
3.
} public void RemoveFromback() { ….
{ )4. public void addAtPosition(Car inserted, int position
5.
;Car current = head
6.
;Car newc = inserted
7.
;int counter =0
• فذذذذذ السذذذذذطر 7تذذذذذم تعريذذذذذف المتغيذذذذذر
8.
counterكعداد يبذدأ عنذد الصذفر و يذدداد { )while (counter < position
خطو خطو من خذالل السذطر 10و ذلذك
9.
;current = current.next
للوصول للموضع الذ نريد .
10.
} ;counter++
•السذذذذطرين 11و 12يذذذذتم فذذذذيهم ءضذذذذافة
العنصر الجديد حيذث يشذير العضذو الجديذد
11.
;newc.next = current.next
للعنصذذذذر التذذذذال لذذذذه ,ثذذذذم يشذذذذير العنصذذذذر
12.
;current.next = newc
currentلذذه و بذذذلك يكذذون قذذد تذذم ءقحامذذه
13.
} ;lenght++
ف القائمة.
14.ا
الفــر
المادة العلمية إعداد /أ .محمود}رفيق
مساق تراكيب البيانات
َّ
إضافة عنصر في ترتيب معين
current
Data n
null
n
…..
Data 3
2
1
×
Front
Head
Data 2
Data 1
1
2
New
data
العنصر الجديد سيتم إضافته بعد قيمة محددة أو قبل قيمة ما
0
إضافة عنصر بحسب عنوان الموضع
29
{ 1. class ListCar
2.
….
} … { )3. public void addAtPosition(Car inserted, int position
{ )4. public void addAtvalue(Car inserted, int value
5.
;Car current = head
6.
;Car front = head
•السذذطر 8يوضذذش شذذرط اسذذتمرار التكذذرار
7.
;Car newc = inserted
هو أن تكون القيمة للعنصر الحال أقل مذن
8.
القيمذذذة للعنصذذذر الجديذذذد ,بمجذذذرد الوصذذذول { )while (current.value < value
لعنصذذذذر قيمتذذذذه أكبذذذذر أو تسذذذذاو يتوقذذذذف
9.
;front = current
التكرار.
10.
} ;current = current.next
• عنذذذذد توقذذذذف التكذذذذرار سذذذذيكون المتغيذذذذر
currentيشير للعنصر ذو القيمذة الكبيذر ,
11.
;newc.next = current
بينما المتغير frontيشير للقيمة ا قل.
12.
;front.next = newc
•ف ذ السذذطرين 11و 12يذذتم عمذذل ءعذذاد
التوجيه
13.
} ;lenght++
14.ا
الفــر
المادة العلمية إعداد /أ .محمود}رفيق
مساق تراكيب البيانات
َّ
حذف عنصر من موضع ما
حذف العناصلر أيضلا ال تقتصلر عللى البدايلة و النهايلة ,فقلد نحتلاج
أحيانا إلى حذف عنصر من موضع معين أو ذو قيملة معينله و ذللك
عند التعامل غالبا مع قائمة مرتبـة.
هللذل العمليللة سللتؤثر علللى عنصللرين ,حيللث أن العنصللر الللذ س ليتم
حذفه كان مرتبط بعنصر تالي و عنصر سابق.
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
حذف عنصر من موضع ما
و للحذف حالتين هما/
حذف بحسب رقم الموضع مثل حلذف العنصلر الثاللث أو الرابلع و غيلر
ذلك ,و في هذل الحالة نحتاج إلى إن ال عداد داخل التكرار يسلتمر حتلى
نصل إلى ذلك العنصر.
حذف بحسب القيمة مثلما نقول /احذف أول عنصر ذو القيملة ,5و فلي
هذل الحالة نحتاج إلى تكلرار يعتملد عللى لرط البحلث علن أول عنصلر
ذو القيمة 5ليتم حذفه
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
حذف عنصر من موضع ما
1
Head
Data 1
Front
Current
Data k-1
×
Data k
×
Data k+1
Data n
null
حذف عنصر بحسب عنوان الموضع
33
1. class ListCar {
2.
….
3.
public void RemovefromPosition(int position) {
4.
Car current = head;
5.
Car front = head;
6.
int counter = 0;
7.
while (counter < position) {
8.
current = front;
9.
front = front.next;
10.
counter++; }
11.
current.next = front.next;
12.
lenght--; }
13. }
الفــرا
محمود رفيق. أ/المادة العلمية إعداد
َّ
/تدريب ذاتي
اكتب الكود البرمجي
الال م لحذف عنصر
بحسب قيمة معينة
مساق تراكيب البيانات
إضافة عنصر في ترتيب معين
current
Data n
null
n
…..
Data 3
2
1
×
Front
Head
Data 2
Data 1
1
2
New
data
العنصر الجديد سيتم إضافته بعد قيمة محددة أو قبل قيمة ما
0
إضافة عنصر بحسب عنوان الموضع
35
{ 1. class ListCar
2.
….
} … { )3. public void addAtPosition(Car inserted, int position
{ )4. public void addAtvalue(Car inserted, int value
5.
;Car current = head
6.
;Car front = head
•السذذطر 8يوضذذش شذذرط اسذذتمرار التكذذرار
7.
;Car newc = inserted
هو أن تكون القيمة للعنصر الحال أقل مذن
8.
القيمذذذة للعنصذذذر الجديذذذد ,بمجذذذرد الوصذذذول { )while (current.value < value
لعنصذذذذر قيمتذذذذه أكبذذذذر أو تسذذذذاو يتوقذذذذف
9.
;front = current
التكرار.
10.
} ;current = current.next
• عنذذذذد توقذذذذف التكذذذذرار سذذذذيكون المتغيذذذذر
currentيشير للعنصر ذو القيمذة الكبيذر ,
11.
;newc.next = current
بينما المتغير frontيشير للقيمة ا قل.
12.
;front.next = newc
•ف ذ السذذطرين 11و 12يذذتم عمذذل ءعذذاد
التوجيه
13.
} ;lenght++
14.ا
الفــر
المادة العلمية إعداد /أ .محمود}رفيق
مساق تراكيب البيانات
َّ
طباعة عناصر القائمة
لطباعة بيانات عناصلر القائملة ,كلل ملا نحتلاج لله تكلرار يملر عللى
عناصر القائمة ,و في كل جولة يتم طباعة البيانات من خلالل جملل
طباعة تستخدم جملة كهذل.
Current.value
Current.id
Current.location
و هكذا ...
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
طباعة عناصر القائمة
37
1. class ListCar {
2.
….
3. public void PrintData() {
4.
Car current = head;
5.
Console.WriteLine("The Data of List are");
6.
int counter = 1;
7.
while (current != null) {
8.
Console.WriteLine("The Data of element # "+counter);
9.
Console.WriteLine("=======================");
10.
Console.WriteLine("ID
" + current.id);
11.
Console.WriteLine("Location " + current.location);
12.
Console.WriteLine("Type " + current.type);
13.
Console.WriteLine("=======================");
14.
current = current.next;
15.
counter++; }
16.
}}
الفــرا
محمود رفيق. أ/المادة العلمية إعداد
َّ
مساق تراكيب البيانات
أ كركم
38
السؤال مفتاح للعلوم كلها...
تذكر أن نيوتن عندما سأل لماذا وقعت التفاحـة وصل إلى قوانين الجاذبيــة ...
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
بذكرك ربنـا نحيــا
39
الذكر لمن لبس الثياب الجديد
سمممنِ ل ِه ِ،ك
اللَّ ُهممم َّلكلل لممممكال ل،أممم ُك ك ل ممم لكك لك ل
نم ِه لَكللمُ،ك
كنممركه م ِمَ َِك ل له م ِك
لسملللُ ل ِ
مَ لنممصك ُ
نهِ لكَكلل كُ،
لل ُ
عنذُك ِب ل ِ
كنركش ِلَ َِك لكش ِلَك لنصك ُ
سو ُل َّ ِ
صلَّى َّ
س ِعي ٍد ْال ُخ ْد ِر ِ رضي هللا عنه قال َ ( :كانَ َر ُ
سل َّمالُ
َّللاُ َ
َ
سللَّ َم ِإ َذا ا ْسلتَ َج َّد ثَ ْوبًلا َ
علَ ْي ِه َو َ
ع ْن أَبِي َ
َّللا َ
س ْلوتَنِي ِه و أَ ْسلأَلُ َك ِم ْ
لن َخي ِْلر ِل َو َخي ِْلر َملا
لك ا ْل َح ْمل ُد و أَ ْن َ
صا أَ ْو ِع َما َمةً و ث ُ َّم يَقُو ُل :اللَّ ُهل َّم لَ َ
بِا ْس ِم ِه و ِإ َّما قَ ِمي ً
لت َك َ
صحيح أبو داود
صنِ َع لَهُ )
صنِ َع لَهُ و َوأَ ُ
عوذُ بِ َك ِم ْن َِر ِل َو َِر َما ُ
ُ
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
ترتيب عناصر القائمة
كملللا تعلمنلللا فلللي محاضلللرات سابقلللـة أن الترتيلللب لللله خوار ميلللات
مختلفة ,هلذل الخوار ميلات يمكلن تطبيقهلا عللى أ نلون ملن أنلوان
هياكل البيانات و منها القائمة .LinkedList
و ألن عناصللر القائمللة تحتللو علللى أكثللر مللن نللون مللن البيانللات,
فيمكن لنا أن نقوم بعملية الترتيب اعتمادا على هذل األنوان ,فتصلبح
المقارنة حسب هذا النون أو ذاك كما يلي
) (Current.id > front.id
) (current.value > front.value
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
ترتيب عناصر القائمة
الترتيب في حد ذاته قد يتم بطريقتين:
األولى /أن نقوم بعمل ترتيب حسب القيم و بالتالي يتم تنفيلذ داللة التبلادل
swapللقلليم دون التعامللل مللع تغييللر الكائنللات و هللذل الطريقللة األس لهل
فكريا و فهما.
الثانية /أن يتم عمل swapللكائنات كاملة و هي طريقة تحتاج إلى الفهم
األعمق و لكنها أكثر احترافيـة.
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
بطريقة الكائناتBubble sort ترتيب عناصر القائمة من خالل
Head Current
a
Data 1
Second
2
c
d
b
Data k-1
Data k
Data k+1
e
Data n
4
3
1
null
Temp
Head
a
Data 1
b
Data k
c
Data k-1
d
Data k+1
e
Data n
null
بطريقة الكائناتBubble sort ترتيب عناصر القائمة من خالل
Head Current
a
Data 1
Second
2
c
d
b
Data k-1
Data k
Data k+1
e
Data n
4
3
1
Temp
Node current = head;
Node temp;
for (int i = 0; i < lenght; i++) {
Car current = head;
while (current.Next != null) {
temp.data = current.Next.data;
current.Next.Value = current.Value;
current.Value = temp;
current = current.Next.Next; }
}
null
بطريقة القيمBubble sort ترتيب عناصر القائمة من خالل
Head Current
a
Data 1
Front
c
b
Data k-1
Data k
d
Data k+1
e
Data n
null
Tempalue = Current.value;
Current.value = front.value;
Front.value = tempvalue;
...
بطريقة القيمBubble sort ترتيب عناصر القائمة من خالل
45
1. class ListCar {
2. public void bubSort() {
3.
for (int i = 0; i < lenght; i++) {
4.
Car current = head;
5.
while (current.next != null) {
6.
if (current.value > current.next.value) {
7.
int TempValue = current.value;
8.
int TempId = current.id;
9.
String TempLocation = current.location;
10.
current.value = current.next.value;
11.
current.id = current.next.id;
12.
current.location = current.next.location;
13.
current.next.value = TempValue;
14.
current.next.id = TempId;
15.
current.next.location = TempLocation; }
16.
current = current.next; } } }
ا17.
الفــر
محمود}رفيق. أ/المادة العلمية إعداد
َّ
مساق تراكيب البيانات
أ كركم
46
السؤال مفتاح للعلوم كلها...
تذكر أن نيوتن عندما سأل لماذا وقعت التفاحـة وصل إلى قوانين الجاذبيــة ...
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
بذكرك ربنـا نحيــا
47
الذكر لمن لبس الثياب الجديد
سممممنِ ل ِه ِ،ك ك
اللَّ ُهمممم َّلكللمممم ل كال ل،أمممم ُك ك ل مممم لك لك ل
نم ِه لَكللم ك ُ،ك
لسملللُ ل ِ
كنممرك له م ِمَ َِك ل له م َِك لنممصك ُ
نهِ لكَ لل كُ،
لل ُ
عنذُك ِب ل كنركش ِلَ َِك لكش ِلَك لنصك ُ
سو ُل َّ ِ
صلَّى َّ
س ِعي ٍد ْال ُخ ْد ِر ِ رضي هللا عنه قال َ ( :كانَ َر ُ
سل َّمالُ
َّللاُ َ
َ
سللَّ َم ِإ َذا ا ْسلتَ َج َّد ثَ ْوبًلا َ
علَ ْي ِه َو َ
ع ْن أَبِي َ
َّللا َ
س ْلوتَنِي ِه و أَ ْسلأَلُ َك ِم ْ
لن َخي ِْلر ِل َو َخي ِْلر َملا
لك ا ْل َح ْمل ُد و أَ ْن َ
صا أَ ْو ِع َما َمةً و ث ُ َّم يَقُو ُل :اللَّ ُهل َّم لَ َ
بِا ْس ِم ِه و ِإ َّما قَ ِمي ً
لت َك َ
صحيح أبو داود
صنِ َع لَهُ )
صنِ َع لَهُ و َوأَ ُ
عوذُ بِ َك ِم ْن َِر ِل َو َِر َما ُ
ُ
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
البحث عن عنصر ما
تعرضللنا فللي المحاضللرات األولللى مللن المسللاق إلللى خوار ميللات
البحللث و كيفيللة تطبيقهللا علللى مجموعللة مللن العناصللر المخ نللة فللي
مصفوفة.
في هذل المحاضرة سنطبق المفهوم ذاته على مجموعة من العناصر
المخ نة داخل قائمة.
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ
البحث عن عنصر ما بطريقة التسلسل
1. class ListCar {
2. public Car Find(int WantedVlaue )
3.
{
4.
Car current = head;
5.
int flag = -1;
6.
while (current != null) {
7.
if (current.value == WantedVlaue) {
8.
flag = 1;
9.
break; }
10.
current = current.next; }
11.
if (flag == 1)
12.
return current;
13.
else
14.
return null;
}
15. }
الفــرا
محمود رفيق. أ/المادة العلمية إعداد
َّ
مساق تراكيب البيانات
أ كركم
50
السؤال مفتاح للعلوم كلها...
تذكر أن نيوتن عندما سأل لماذا وقعت التفاحـة وصل إلى قوانين الجاذبيــة ...
مساق تراكيب البيانات
الفــرا
المادة العلمية إعداد /أ .محمود رفيق
َّ