تراكيب البيانات مدرس المساق/ أ. محمود رفيق الفـــرَّا

Download Report

Transcript تراكيب البيانات مدرس المساق/ أ. محمود رفيق الفـــرَّا

‫قسم علوم الحاسوب و تكنولوجيا المعلومات‬
‫تخصص دبلوم البرمجيات و قواعد البيانات‬
‫تراكيب البيانات‬
‫الوحدة السادســة‬
‫هيكل البيانات ‪Stack‬‬
‫المادة العلمية إعداد‬
‫‪http://mfarra.cst.ps‬‬
‫أ‪ .‬محمود رفيق الفـــرَّ ا‬
‫الفـــرا‬
‫مدرس المساق‪ /‬أ‪ .‬محمود رفيق‬
‫َّ‬
‫‪2010-2011‬‬
‫محاور المحاضرة‬
‫‪2‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫ما هـو المكدس ؟‬
‫عملية اإلضافة ‪Push operation‬‬
‫عملية الحذف ‪Pop operation‬‬
‫عرض بيانات عنصر ما‬
‫إفراغ الـ ‪Stack‬‬
‫طباعة العناصر‬
‫البحث عن عنصر ما‬
‫ترتيب العناصر باستخدام ‪bubble Sort‬‬
‫مساق تراكيب البيانات‬
‫(‪)Stack‬‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫بذكرك ربنـا نحيــا‬
‫‪3‬‬
‫‪‬‬
‫الذكر عند النوم‬
‫باسممربي ب م ينبممبكيأرف م ينبممبي ب م ي ي م كي‬
‫نف م ي ا هر‪،‬ممانين ي س م ‪،‬اي اهفظ‪،‬مما برمماي حفم يب م‬
‫عفادكيالصالحين‬
‫عنْ أبي هريرة رضي هللا عنها قال رسول هللا صلل هللا عليلو وسللم ‪( :‬إذا أوى أحلدكم‬
‫إل فراشو ‪ ،‬فلينفضو بداخلة إزاره ‪ ،‬فإنو ال يدري ملا خلفلو عليلو ‪ ،‬للم ليضلطجع علل‬
‫شقو األيمن ‪ ،‬لم ليقل ‪ :‬باسلمك ربلي وضلعت جنبلي ‪ ،‬وبلك أرفعلو ‪ ،‬إن أمسلكت نفسلي‬
‫صحيح الجامع‬
‫فارحمها ‪ ،‬وإن أرسلتها فاحفظها بما تحفظ بو عبادك الصالحين )‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫ما هـو المكدس ؟ ‪Stack‬‬
‫‪4‬‬
‫‪‬‬
‫المكدس هو أحد هياكل البيانات التي تسمح بالتفاعل معهلا (حلذف و‬
‫إضافة) من جهة واحدة فقط و هي تحاكي مفهلوم (اللرص الرأسلي)‬
‫ملل مجموعة من الكتب الرأسيـة أو مجموعة من اللمار كملا يظهلر‬
‫في الصور أدناه‪.‬‬
‫ما هـو المكدس ؟ ‪Stack‬‬
‫‪5‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫و إن كانت القائمة تسمح بالحلذف و اإلضلافة فلي أي موضلع و ملن‬
‫أي جهـة‪ ,‬فإنَّ المكدس ال يسمح إال بلالث عمليلات أساسلية فقلط تلتم‬
‫من أعل و هم‪ :‬اإلضافـة ‪ Push‬و الحذف ‪ Pop‬العرض ‪.Peek‬‬
‫و تتعامل العمليلات ملع المكلدس بمبلدأ ملن يلدخل أوال يخلرخ أخيلرا‬
‫)‪FIFO (First in First Out‬‬
‫هذا ال يعني أننا ال نستطيع القيام بعمليات أخلرى‪ ,‬و لكلن أي عمليلة‬
‫أخرى البد أن تعتمد عل هذه العمليات‪.‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫ما هي عناصر المكدس؟‬
‫‪6‬‬
‫‪‬‬
‫يتكون المكدس من عناصر مماللة تماما لعناصر القائمة‪ ,‬و ال يوجد‬
‫فروق أبدا بينهما سوى العمليات التي يسمح بالقيام بها عل كالهما‪.‬‬
‫‪7‬‬
‫‪Top‬‬
‫‪1‬‬
‫‪6‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫ من الموظفين‬Stack ‫عناصر‬
7
1. class Employee {
2.
public int salary;
3.
public String name;
4.
public Employee()
5.
{
6.
salary = 300;
7.
name = "no name";
8.
}
9.
public Employee(int salary, String name)
10.
{
11.
this.salary = salary;
12.
this.name = name;
13.
}
14.‫ محمود }رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫بناء ‪ Stack‬من الموظفين‬
‫‪8‬‬
‫‪1. class EmployeeStack‬‬
‫‪2.‬‬
‫{‬
‫‪3.‬‬
‫;‪Employee Top = null‬‬
‫‪4.‬‬
‫;‪int length =0‬‬
‫هنا تضاف العمليات المختلفة ‪//‬‬
‫}‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫‪5.‬‬
‫‪6.‬‬
‫عملية اإلضافة ‪Push operation‬‬
‫‪9‬‬
‫‪‬‬
‫إضافة أي عنصر يتم من خالل التالي‪:‬‬
‫‪ ‬جعل مؤشر العنصر الجديد يشير إل ما يشير لو المؤشر ‪Top‬‬
‫‪ ‬جعل المؤشر ‪ Top‬يشير إل العنصر الجديد‪.‬‬
‫‪7‬‬
‫مساق تراكيب البيانات‬
‫‪Top‬‬
‫‪Top‬‬
‫‪1‬‬
‫‪1‬‬
‫‪6‬‬
‫‪6‬‬
‫‪Top‬‬
‫‪6‬‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
Push operation ‫عملية اإلضافة‬
10
1. public void Push(Employee NewEmp) {
2.
Employee newe = NewEmp;
3.
if (Top == null) {
4.
Top = newe;
5.
newe.next = null; }
6.
else {
7.
newe.next = Top;
8.
Top = newe; }
9.
length++;
10.
Console.WriteLine("A new Employee has been added to Stack: "+length);
11.
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫عملية الحذف ‪Pop operation‬‬
‫‪11‬‬
‫‪‬‬
‫حذف العنصر يتم من خالل التالي‪:‬‬
‫‪ ‬جعل ‪ Top‬يشير إل العنصر التالي للعنصر األول‪.‬‬
‫‪7‬‬
‫مساق تراكيب البيانات‬
‫‪Top‬‬
‫‪7‬‬
‫‪1‬‬
‫‪1‬‬
‫‪6‬‬
‫‪6‬‬
‫‪Top‬‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
Push operation ‫عملية اإلضافة‬
12
1. public void Pop()
2.
{
3.
if (Top == null)
4.
Console.WriteLine("Stack is Empty!!");
5.
else
6.
{
7.
Top = Top.next;
8.
length--;
9.
Console.WriteLine("Now Top Points to: " + Top.name);
10.
}
11.
12.
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫عملية عرض بيانات العنصر األخير ‪Peek‬‬
‫‪13‬‬
‫‪‬‬
‫‪‬‬
‫تعللرف عمليللة عللرض البيانللات للعنصللر األخيللر (آخللر عنصللر ت لم‬
‫إضافتو) ما بـ ‪.Peek‬‬
‫و هذا العنصر مشار إليو بالمؤشـر ‪TOP‬‬
‫‪Top.name‬‬
‫‪Top.salary‬‬
‫…‬
‫مساق تراكيب البيانات‬
‫‪7‬‬
‫‪Top‬‬
‫‪1‬‬
‫‪6‬‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
Peek ‫عملية عرض بيانات العنصر األخير‬
14
1. public void Peek()
2.
{
3.
if (Top == null)
4.
Console.WriteLine("The Stack is Empty!!");
5.
else
6.
Console.WriteLine("The Employee Data:\n"+
7.
"Name: "+Top.name+"\nSalary: "+Top.salary);
8.
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫أشكركم‬
‫‪15‬‬
‫السؤال مفتاح للعلوم كلها‪...‬‬
‫تذكر أن نيوتن عندما سأل لماذا وقعت التفاحـة وصل إل قوانين الجاذبيــة ‪...‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫بذكرك ربنـا نحيــا‬
‫‪16‬‬
‫‪‬‬
‫الذكر عند االستيقاظ من النوم‬
‫الحرممهلليايالممد ي ديع م ي نهم ينعا ممان م ي‬
‫أ هلل ينين ذ يل يبدكره‬
‫عنْ أبي هريرة رضي هللا عنو قال‪ ,‬قال رسول هللا صل هللا عليلو وسللم ‪( :‬إذا اسلتيقظ‬
‫أحدكم فليقل ‪ :‬الحمد هلل الذي رد علي روحي وعافلاني فلي جسلدي ‪ ،‬و أذن للي بلذكره)‬
‫حسـنـَّـو األلباني‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫عملية إفراغ كافة عناصر الـ ‪Stack‬‬
‫‪17‬‬
‫‪‬‬
‫إفللراغ كافللة عناصللر المكللدس هللي ببسللاطة جعللل المؤشللر ‪ Top‬ال‬
‫يشلللير لهلللذه العناصلللر و بلللذلك تصلللبح الكائنلللات (العناصلللر) غيلللر‬
‫مستعملة‪ ,‬مما يجعلها تحذف تلقائيـا من الذاكرة‪.‬‬
‫‪7‬‬
‫‪Top‬‬
‫‪1‬‬
‫‪6‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
Stack ‫عملية إفراغ كافة عناصر الـ‬
18
1. public void Clear()
2.
{
3.
if (Top == null)
4.
Console.WriteLine("The Stack is Empty!!");
5.
else
6.
Top = null;
7.
Length = 0;
8.
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫عملية طباعة عناصر الـ ‪Stack‬‬
‫‪19‬‬
‫‪‬‬
‫عملية الطباعة تتم من خالل التنقل عل عناصلر المكلدس و طباعلة‬
‫البيانات و هذا يتم من تعريف متغير ‪ Current‬يبدا من حيث يشلير‬
‫المتغير ‪.Top‬‬
‫‪7‬‬
‫‪next‬‬
‫‪next‬‬
‫‪Top‬‬
‫‪current‬‬
‫‪1‬‬
‫‪6‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
Stack ‫عملية طباعة عناصر الـ‬
20
1.
2.
3.
4.
5.
6.
7.
public void PrintAll()
{
Employee current = Top;
int x =1;
while (current != null)
{
Console.WriteLine("Data Of Employee # "+x+" is\n "+ "Name: “ +
current.name + "\nSalary: "+current.salary);
8. Console.WriteLine("==============================");
9.
x++;
10.
current = current.next;
11.
}
12.
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫البحث عن عنصر ما‬
‫‪21‬‬
‫‪‬‬
‫البحث كما تعلمنا سابقا قد يلتم بلأكلر ملن طريقلـة‪ ,‬و جمليعهم يعتملد‬
‫علل وجللود تكللرار يتحللرك مللن خللالل وجللود مؤشللر يبللدأ مللن حيللث‬
‫يوجد المؤشر ‪Top‬‬
‫‪7‬‬
‫‪next‬‬
‫‪next‬‬
‫‪Top‬‬
‫‪current‬‬
‫‪1‬‬
‫‪6‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫البحث عن عنصر ما‬
22
1. public void SearchByName(String name )
2.
{
3.
Employee current = Top;
4.
bool flag = false;
5.
while ( current != null)
6.
{
7.
if (name.CompareTo(current.name) == 0)
8.
{
9.
flag = true;
10.
break;
11.
}
12.
current = current.next;
13.
}
14.
if (flag == true)
15.
Console.WriteLine("Exist!!");
16.
else
17.
Console.WriteLine("Does not Exist!!");
18.‫ محمود رفيق الفــرَّ ا‬.‫}أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫أشكركم‬
‫‪23‬‬
‫السؤال مفتاح للعلوم كلها‪...‬‬
‫تذكر أن نيوتن عندما سأل لماذا وقعت التفاحـة وصل إل قوانين الجاذبيــة ‪...‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫بذكرك ربنـا نحيــا‬
‫‪24‬‬
‫‪‬‬
‫الذكر عند الصعود و النزول‬
‫ذايصبهللنايق رايااي كفري‪...‬‬
‫ذاينزلرايق رايسفحا يااي‪...‬‬
‫عنْ جابر بن عبلد هللا رضلي هللا عنهلا قلال ‪( :‬كنلا إذا صلعدنا كبرنلا ‪ ،‬وإذا‬
‫صحيح البخاري‬
‫نزلنا سبحنا ‪) .‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫ترتيب العناصر باستخدام ‪bubble Sort‬‬
‫‪25‬‬
‫‪‬‬
‫ترتيلللب العناصلللر تلللم شلللرحو فيملللا سلللبق‪ ,‬و االخلللتالف فلللي طبيعلللة‬
‫العناصللر‪ ,‬فعناصللر المكللدس عبللارة عللن كائنللات يللتم اإلشللارة لهللا م لن‬
‫خالل متغير ‪ Current‬يبدأ من حيث يوجد ‪Top‬‬
‫‪7‬‬
‫‪next‬‬
‫‪next‬‬
‫‪Top‬‬
‫‪current‬‬
‫‪1‬‬
‫‪6‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
Stack ‫عملية طباعة عناصر الـ‬
26
1. public void bubSort()
2.
{
3.
for (int i = 0; i < length; i++)
4.
{
5.
Employee current = Top;
6.
while (current.next != null) {
7.
if (current.salary > current.next.salary) {
8.
int TempSalary = current.salary;
9.
String Tempname = current.name;
10.
current.salary = current.next.salary;
11.
current.name = current.next.name;
12.
current.next.salary = TempSalary;
13.
current.next.name = Tempname; }
14.
current = current.next; } }
15.
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫أشكركم‬
‫‪27‬‬
‫السؤال مفتاح للعلوم كلها‪...‬‬
‫تذكر أن نيوتن عندما سأل لماذا وقعت التفاحـة وصل إل قوانين الجاذبيــة ‪...‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬