تراكيب البيانات

Download Report

Transcript تراكيب البيانات

‫قسم علوم الحاسوب و تكنولوجيا المعلومات‬
‫تخصص دبلوم البرمجيات و قواعد البيانات‬
‫تراكيب البيانات‬
‫الوحدة السادســة‬
‫هيكل البيانات ‪Queue‬‬
‫المادة العلمية إعداد‬
‫‪http://mfarra.cst.ps‬‬
‫أ‪ .‬محمود رفيق الفـــرَّ ا‬
‫مدرس المساق‪ /‬أ‪ .‬محمود رفيق الفـــرَّ ا‬
‫‪2010-2011‬‬
‫محاور المحاضرة‬
‫‪2‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫ما هـو الطابور ؟‬
‫عملية اإلضافة ‪Inqueue operation‬‬
‫عملية الحذف ‪Dequeue operation‬‬
‫عرض بيانات عنصر ما‬
‫إفراغ الـ ‪Queue‬‬
‫طباعة العناصر‬
‫البحث عن عنصر ما‬
‫ترتيب العناصر باستخدام ‪Bubble Sort‬‬
‫مساق تراكيب البيانات‬
‫(‪)Queue‬‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫بذكرك ربنـا نحيــا‬
‫‪3‬‬
‫‪‬‬
‫الذكر إذا أكل اإلنسان عند آخرين‬
‫الله َّم با ِرك لَهم فيما رَزقتهم‪ ،‬واغ ِ‬
‫مهم‬
‫وارح‬
‫لهم‬
‫ر‬
‫ف‬
‫َ ُ‬
‫ُ َ ُ‬
‫َ‬
‫عنْ عبد هللا بن بسر رضي هللا عنها قال ‪( :‬نزلل رسزول هللا صزل هللا عليزل وسزلم علز أبزي فقربنزا إليزل‬
‫طعاما فأكل منل ثم أتي بتمر فكان يأكل ويلقزي النزوب ببصزبعيل جمزس السزبابة والوسزط قزال شزعبة وهزو‬
‫ظني فيل إن شاء هللا وألق النوب بين أصبعين ثم أتي بشراب فشربل ثم ناولل الزذ عزن يمينزل قزال فقزال‬
‫أبي وأخذ بلجام دابتل ادع لنا فقال اللهم بارك لهم فيما رلقتهم واغفر لهم وارحمهم ) صحيح الترمذ‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫ما هـو الطابور؟ ‪Queue‬‬
‫‪4‬‬
‫‪‬‬
‫الطابور عبارة عن هيكلية بيانات يتم فيها تخلين عدد من العناصزر‬
‫بالطريقززة ذاتهززا التززي نتعامززل فيهززا مززس طوابيرنززا فززي حياتنزا اليوميززة‪,‬‬
‫حيززث تززتم اإلضافززـة فززي خلززف الطززابور فقززط‪ ,‬بينمززا يززتم الحزذف مززن‬
‫مقدمة الطابور‪.‬‬
‫‪Front‬‬
‫‪Ghadeer‬‬
‫‪Rear‬‬
‫‪Mohamed‬‬
‫‪Ali‬‬
‫‪Ahmed‬‬
‫‪Hussam‬‬
‫ما هـو الطابور؟ ‪Queue‬‬
‫‪5‬‬
‫‪‬‬
‫و للطابور ثالث عمليات أساسيـة هي‪:‬‬
‫‪ ‬إضافة عناصر جديدة‪ :‬و تتم إضزافة العناصزر هزذي فزي نهايزة الطزابور و‬
‫تعرف العملية باسم ‪ InQueue‬عند المؤشر ‪.Front‬‬
‫‪ ‬حذف عناصر‪ :‬و تتم حذف العناصزر مزن مقدمزة الطزابور و تعزرف هزذي‬
‫العملية باسم ‪ DeQueue‬عند المؤشر ‪. Rear‬‬
‫‪ ‬عرض معلومات العنصر األول‪ :‬و تعرف هذي العملية باسم ‪.Peek‬‬
‫ما هـو الطابور؟ ‪Queue‬‬
‫‪6‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫ما هي عناصر الطابور؟‬
‫‪7‬‬
‫‪‬‬
‫يتكون الطابور من عناصر مماثلة تماما لعناصر القائمة و المكدس‪,‬‬
‫و ال يوجد فروق أبدا بينهما سوب العمليات التي يسمح بالقيام بها‪.‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫ من اللبائن‬Queue ‫عناصر‬
8
1. class Customer {
2.
public int parts;
3.
public int amount;
4.
public String name;
5.
public Customer next;
6.
public Customer() {
7.
parts = 0;
8.
amount = 0;
9.
name = "no name"; }
10.
public Customer(int parts, int amount, String name) {
11.
this.parts = parts;
12.
this.amount = amount;
13.
this.name = name; } }
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫ من اللبائن‬Queue ‫بناء‬
9
1. class QueueOfCustomer {
2.
public Customer Front;
3.
public Customer Rear;
4.
public int length;
5.
public QueueOfCustomer()
6.
{
7.
Front = null;
8.
Rear = null;
9.
length = 0;
10.
}
11.
// ... ‫هنا يتم إضافـة عمليات المعالجة من حذف و إضافة‬
12. }
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫عملية اإلضافة ‪EnQueue Operation‬‬
‫‪10‬‬
‫‪‬‬
‫إضافة أ عنصر يتم من خالل التالي‪:‬‬
‫‪ ‬جعل مؤشر العنصر الجديد يشير إل ما يشير لل المؤشر ‪Rear‬‬
‫‪ ‬جعل المؤشر ‪ Rear‬يشير إل العنصر الجديد‪.‬‬
‫‪Rear‬‬
‫‪X‬‬
‫‪Front‬‬
‫‪2‬‬
‫‪New item‬‬
‫‪Ghadeer‬‬
‫مساق تراكيب البيانات‬
‫‪Mohamed‬‬
‫‪Ali‬‬
‫‪1‬‬
‫‪Ahmed‬‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
EnQueue Operation ‫عملية اإلضافة‬
11
1.
public void InQueue(Customer addCus)
2.
{
3.
Customer newc = addCus;
4.
if (Front == null)
5.
{
6.
Front = newc;
7.
Rear = newc;
8.
newc.next = null;
9.
}
10.
else
11.
{
12.
newc.next = Rear;
13.
Rear = newc;
14.
}
15.
length++;
16.
Console.WriteLine("The new Object is added: "+length);
17.
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫عملية الحذف ‪DeQueue operation‬‬
‫‪12‬‬
‫‪‬‬
‫حذف العنصر يتم من خالل التالي‪:‬‬
‫‪ ‬جعل ‪ Front‬يشير إل العنصر التالي للعنصر األول‪.‬‬
‫‪Front‬‬
‫‪Ghadeer‬‬
‫مساق تراكيب البيانات‬
‫‪current‬‬
‫‪Mohamed‬‬
‫‪Rear‬‬
‫‪Ali‬‬
‫‪Ahmad‬‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
DeQueue operation ‫عملية الحذف‬
13
1. public void DeQueue() {
2.
if (Front == null)
3.
Console.WriteLine("The Queue is Empty!!");
4.
else
5.
{
6.
Customer current;
7.
Customer pre_current = Rear;
8.
for (current = Rear; current.next != null; current = current.next)
9.
pre_current = current;
10.
Front = pre_current;
11.
length--;}
12.
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫عملية عرض بيانات العنصر األخير ‪Peek‬‬
‫‪14‬‬
‫‪‬‬
‫‪‬‬
‫تعزززرف عمليزززة عزززرض البيانزززات للعنصزززر األول( أول عنصزززر تزززم‬
‫إضافتل) ما بـ ‪.Peek‬‬
‫و هذا العنصر مشار إليل بالمؤشـر ‪Front‬‬
‫‪Front.name‬‬
‫‪front.salary‬‬
‫…‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
Peek ‫عملية عرض بيانات العنصر األخير‬
15
1.
2.
3.
4.
5.
6.
7.
8.
public void Peek()
{
if (Front == null)
Console.WriteLine("The Queue is empty");
else
Console.WriteLine("The Data of the first is:\n "+
Front.name +"\n "+Front.amount+"\n "+Front.parts);
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫أشكركم‬
‫‪16‬‬
‫السؤال مفتاح للعلوم كلها‪...‬‬
‫تذكر أن نيوتن عندما سأل لماذا وقعت التفاحـة وصل إل قوانين الجاذبيــة ‪...‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫بذكرك ربنـا نحيــا‬
‫‪17‬‬
‫‪‬‬
‫الدعاء لمن أسقاني أو أطعمني‬
‫الله َّم أ ِ‬
‫أطع َمني وأَس ِق َمن س َقاني‬
‫ن‬
‫م‬
‫م‬
‫َطع‬
‫ُ‬
‫َ َ‬
‫عنْ أبي هريرة رضي هللا عنل قال‪ ,‬قال رسول هللا صل هللا عليزل وسزلم ‪( :‬إذا اسزتيقظ‬
‫و أذن لزي بزذكري)‬
‫أحدكم فليقل ‪ :‬الحمد هلل الذ رد علي روحي وعافزاني فزي جسزد‬
‫حسـنـَّـل األلباني‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫عملية إفراغ كافة عناصر الـ ‪Queue‬‬
‫‪18‬‬
‫‪‬‬
‫إفراغ كافة عناصر الطزابور ببسزاطة جعزل المؤشزر ‪ Rear‬ال يشزير‬
‫لهززذي العناصززر و بززذلك تصززبح الكائنززات (العناصززر) غيززر مسزتعملة‪,‬‬
‫مما يجعلها تحذف تلقائيـا من الذاكرة‪.‬‬
‫)(‪1. public void Clear‬‬
‫‪2.‬‬
‫{‬
‫‪3.‬‬
‫)‪if (Rear == null‬‬
‫‪4.‬‬
‫;)"!!‪Console.WriteLine("The Queue is Empty‬‬
‫‪5.‬‬
‫‪else‬‬
‫‪6.‬‬
‫;‪Rear = null‬‬
‫‪7.‬‬
‫;‪Length = 0‬‬
‫‪8.‬‬
‫}‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫عملية طباعة عناصر الـ ‪Queue‬‬
‫‪19‬‬
‫‪‬‬
‫لطباعة عناصر الطابور‬
‫‪ ‬نستحدث مؤشر يبدأ من حيث يشير ‪ Rear‬و ينتقل شيئا فشزيئا و فزي كزل‬
‫دورة من التكرار نقوم بطباعة قيم العناصر‪.‬‬
‫‪Rear current‬‬
‫‪Front‬‬
‫‪Ahmed‬‬
‫مساق تراكيب البيانات‬
‫‪Ghadeer‬‬
‫‪Mohamed‬‬
‫‪Ali‬‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
Stack ‫عملية طباعة عناصر الـ‬
20
1. public void PrintAll()
2.
{
3.
Customer current;
4.
for (current = Rear; current != null; current = current.next)
5.
{
6.
Console.WriteLine(" ========================== ");
7.
Console.WriteLine("The Data of the element is:\n " +
8.
current.name + "\n " + current.amount + "\n " + current.parts);
9.
Console.WriteLine(" ========================== ");
10.
}
11.
}
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫البحث عن عنصر ما‬
‫‪21‬‬
‫‪‬‬
‫البحث كما تعلمنا سابقا قد يزتم بزأكثر مزن طريقزـة‪ ,‬و جمزيعهم يعتمزد‬
‫علز وجززود تكززرار يتحززرك مززن خززالل وجززود مؤشززر يبززدأ مززن حيززث‬
‫يوجد المؤشر ‪Rear‬‬
‫‪Rear current‬‬
‫‪Front‬‬
‫‪Ahmed‬‬
‫مساق تراكيب البيانات‬
‫‪Ghadeer‬‬
‫‪Mohamed‬‬
‫‪Ali‬‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫البحث عن عنصر ما‬
22
1. public void SearchByAmount(int amount)
2.
{
3.
Customer current = Rear;
4.
bool flag = false;
5.
while (current != null)
6.
{
7.
if (current.amount == amount)
8.
{
9.
flag = true;
10.
break;
11.
}
12.
current = current.next;
13.
}
14.
if (flag == true)
15.
Console.WriteLine("The element is exist!! ");
16.
else
17.
Console.WriteLine("The element does not exist!! ");
18.‫محمود رفيق الفــرَّ ا‬
} .‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫أشكركم‬
‫‪23‬‬
‫السؤال مفتاح للعلوم كلها‪...‬‬
‫تذكر أن نيوتن عندما سأل لماذا وقعت التفاحـة وصل إل قوانين الجاذبيــة ‪...‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫بذكرك ربنـا نحيــا‬
‫‪24‬‬
‫‪‬‬
‫الذكر عند االنتهاء من الطعام‬
‫الحمددهلل ح حمددهللا ا ي درا طيرددا مراراددا في د غيددر مددع و و‬
‫مستغنى عن ربنا‬
‫عن أبزي أمامزة رضزي هللا عنزل قزال‪( :‬كزان رسزول هللا صزل هللا عليزل وسزلم إذا رفعزت‬
‫المائدة من بين يديل يقول الحمد هلل حمدا كثيرا طيبا مباركا فيل غير مودع وال مستغن‬
‫صحيح الترمذ‬
‫عنل ربنا)‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
‫ترتيب العناصر باستخدام ‪bubble Sort‬‬
‫‪25‬‬
‫‪‬‬
‫ترتيزب عناصزر الطزابور‪ ,‬باسزتخدام خوارلميزة ‪ bubble sort‬تزتم‬
‫من خالل استحداث مؤشرين (متغيرين) يتحركا مس الطابور ليقارنا‬
‫القيم و يقوما بعمليات االستبدال‪.‬‬
‫‪current‬‬
‫‪Front‬‬
‫‪Ahmed‬‬
‫مساق تراكيب البيانات‬
‫‪Ghadeer‬‬
‫‪Mohamed‬‬
‫‪Pre‬‬
‫‪Rear‬‬
‫‪Ali‬‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬
bubble Sort ‫ترتيب العناصر باستخدام‬
26
1. public void BubSort() {
2.
for (int i = 0; i < length; i++) {
3.
Customer current = Rear;
4.
Customer Pre = Rear.next;
5.
while (current.next != null) {
6.
if (current.amount > Pre.amount) {
7.
int TempAmount = current.amount;
8.
String Tempname = current.name;
9.
int TempParts = current.parts;
10.
current.amount = Pre.amount;
11.
current.name = Pre.name;
12.
Pre.amount = TempAmount;
13.
Pre.name = Tempname;
14.
current.parts = Pre.parts;
15.
Pre.parts = TempParts; }
16.
current = current.next;
17.
Pre = Pre.next; } } }
‫ محمود رفيق الفــرَّ ا‬.‫ أ‬/‫المادة العلمية إعداد‬
‫مساق تراكيب البيانات‬
‫أشكركم‬
‫‪27‬‬
‫السؤال مفتاح للعلوم كلها‪...‬‬
‫تذكر أن نيوتن عندما سأل لماذا وقعت التفاحـة وصل إل قوانين الجاذبيــة ‪...‬‬
‫مساق تراكيب البيانات‬
‫المادة العلمية إعداد‪ /‬أ‪ .‬محمود رفيق الفــرَّ ا‬