Transcript
Page 1: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

1

Queueالطابور

المقدمة

في حياتنا اليومية هناك الكثير من الحاالت التي نرى فيها الناس يقفون على هيئة طوابير لشراء سلعة او

من دفع الفواتير في السوبرماركت الى صعود الباص وليس ..هي موجودة غالبا الي خدمة, انجاز عمل

دمة غير قادر على انجاز خدمة عميل قبل ان يصل فعندما يكون مجهز الخ. انتهاءا في البنوك والمصارف

مثال المحاسب في )تخيل مايحدث عندما يخدم مقدم الخدمة . العميل الالحق فعند ذاك نحتاج الى الطابور

شخص ما بشكل عشوائي قبل االخرين الذين ربما وصلوا قبله دون مراعاة لزمن وصول ( البنك

.االشخاص للحصول عل هذه الخدمة

طابور االنتظار في الحياة اليومية عندما يقف الناس على هيئة طوابيراالنتظار في الحاسبات وائمتشبه ق

وفي الحاسب يطبق نفس لشراء سلعة أو إنجاز عمل، ويطبق في كالهما مبدأ من يأتي أوالً يخدم أوالً،

.المبدأ

عمالنموذج حقيقي لطابور (: 1) شكل

ماهو الطابور

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

في الطابور نحافظ على اثنين من االعداد , المكدس برنامج الطابور هو اكثر صعوبة من كتابة برنامج

.الصحيحة واحد يحدد طرف البداية والثاني يحدد النهاية الخلفية للطابور

هو نوع خاص لتجميع البيانات بحيث ان البيانات في التجميع ,كل البيانات الخطيةهو مثال لهيا الطابور

من هذه , يتم المحافظة عليها بترتيب يتناسب مع العمليات التي من الممكن ان تجرى على هذا الترتيب

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

يعني FIFOان هذا النظام (First In First Out (FIFO))بياني يعتمد على الداخل اوال يخرج اوال

ولذلك فان اضافة عنصر جديد يعني ان جميع , ان العنصر االول الذي يضاف الى الطابور يخرج اوال

.ه يجب ان تخرج قبل العنصر الجديدالعناصر التي اضيفت قبل

Page 2: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

2

, لغرض التزود بالوقود في محطة البنزين واحدة خلف االخرىالسيارات التي تقف كمثال على الطابور

االنتظار في الطابور في نقاط , لقطع تذكرة بالدوراالنتظار , االنتظار بالدور على دفع فاتورة في محل

.الخ...التفتيش االمني

.مة التشغيل وشبكات الحاسوبجدا في انظ ةمعروفالكل اهيال يعتبر منالطابور وفي مجال الحاسبات فان

يدخل في الوقت ولكن فقط عنصر واحد من الممكن ان , الطابور ممكن ان ينمو كبرا ليصبح طويلو

الطابور هيكلية ويتبع, في الوقت الواحد او يخدم الواحد وكذلك عنصر واحد او شخص واحد يخرج

.الخطي والطابور الدائري وهناك نوعين من الطوابير هما الطابور .الداخل اوال خارج اوال

:بعض تطبيقات الطابور

عندما يكون لدينا مصادر مشتركة مثل طابعة تستلم اوامر طباعة من اكثر من حاسوب او تستلم .1

في هذه الحالة فان امر طباعة واحد سيتم تنفيذة بينما , من حاسوب واحد اكثر من امر بالطباعة

او وفقا لخوارزمية )تم تنفيذها حسب اسبقية وصولها وي, االوامر االخرى تنتظر دورها للتنفيذ

(.محددة بالتنفيذ

اذا ماعملنا على الحاسوب وعملنا ضغط سريع بالماوس على اكثر من ملف بفارق وقت قليل .2

فان الملف الثاني سيبقى باالنتظار ,النجاز عملة وكان الملف االول يحتاج الى بعض الوقت, جدا

.عندها يكون بالطابورلحين اكمال الملف االول و

مثال اجهزة االدخال بطيئة نسبة , في داخل الحاسوب فان االجهزة المختلفة لها سرع انجاز مختلفة .3

الجهزة المعالجة لذلك فان عملية ارسال واستالم البيانات بين هذة االجهزة يؤدي الى توقف

عدة ل هذة الحالة فان هناكفي مث ,بعض االجهزة السريعة النتظار البيانات من االجهزة البطيئة

.طرق لمعالجة الفرق بالسرعة احدها استخدام الطابور

انظمة مراكز اتصاالت التلفون تتطلب ان تستخدم الطابور لتجعل االشخاص ينتظرون تلبية .4

.طلباتهم وتوفير الخدمة لهم وخصوصا المجانية

.routerوخصوصا في , الطلبات المختلفة على شبكة االنترنيت ممكن ان تكون ضمن طابور .5

طلبات المقاطعة للبرامج داخل الحاسوب تحتاج الى استخدام الطوابير لتلبية اوامر المقاطعة .6

.المختلفة والتي تصل بوقت واحد او اوقات متقاربة

.انظمة التشغيل بشكل عام تستخدم الطوابير في مراحل مختلفة لتلبية الطلبات الكثيرة للمستخدم .7

الطوابير الخطية

static data structureويمكن ان تمثل ماديا كمصفوفة وتدعى حينها هياكل البيانات المستقرة تدعى هياكل بهذا او من الممكن ان تمثل كقائمة موصولة و, وعندها سترث جميع صفات المصفوفات

, لةالقوائم الموصو وصفات وستمتلك جميع خواص dynamic data structureالبيانات الديناميكية

وبغض النظر عن طريقة تمثيل الطابور فان عمليات االضافة تحدث في ذيل الطابور بينما الحذف يحدث

.في راس الطابور .ويحتوي الطابور على مؤشرين احدهما مؤشر البداية واالخر مؤشر النهاية

Page 3: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

3

الهيكل العام للطابور الخطي(: 2)شكل

:(الطابور) قوائم االنتظار تنفيذ

المراد وضعها في ب حجز حيز في الذاكرة يستوعب البياناتواالنتظار على الحاس يتطلب تنفيذ قوائم

موقع او بداية األول اإلشارة إلى رأس المؤشر مع وجود مؤشرين يتولى ,الطابور ووفقا لحجم الطابور

Tail Pointer (ائمةذيل الق) بينما يشير اآلخر إلى نهاية موقع االنتظار Head Pointer االنتظار

اخرالقائمة إلى عنوان ويشير مؤشر رأس القائمة إلى عنوان أول موقع مشغول بينما يشير مؤشر ذيل

حركة التعامل مع قوائم )(الشكل ويوضح. في كتلة المواقع المعنونة المخصصة للقائمة مشغولموقع

.االنتظار

خطيعمليات االضافة والحذف في الطابور ال(: 3)شكل

:استخدام المصفوفة بالطابورمميزات

تنفيذها بسيط.

يجب ان يحدد حجم الطابور عند االعالن.

عند استخدام عدد قليل من ةالفضاء ممكن ان اليستخدم بشكل جيد ويكون فقدان بمواقع الذاكر

.مع االعالن عن حجم كبير للطابور العناصر

Page 4: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

4

حجم ) حدد بها حجم الطابور ناصر التياليمكن اضافة عناصر اضافية اكثر من عدد الع

(.المصفوفة

:تنفيذ الطابور باستخدام القوائم الموصولةمميزات

تخصيص ذاكرة بشكل الي لكل عنصر جديد.

بواسطة المؤشرات ربط عناصر الطابور مع بعضها.

استخدام مؤشرين واحد يؤشر على العنصر االول بالطابور والثاني يؤشر على العنصر االخير

.بالطابور

تعتبر طريقة جيدة لترشيد استهالك الذاكرة.

:خوارزمية اضافة عنصر الى الطابور

وفقا لحجم ) اذا كان يؤشر على الموقع االخير للطابور, ال فحص مؤشر النهاية للطابوريتم او .1

.فيتم ارسال رسالة بان الطابور اليوجد به فراغ ,(الطابور المحدد ابتداءا

:عنده يتم مايلي, شر النهاية يؤشر على الموقع االخير للطابوراذا لم يكن مؤ .2

A. اي ينتقل المؤشر الى الموقع ) باضافة واحد له (مؤشر النهاية) ير موقع المؤشرييتم تغ

(.الجديد

B. عنصر الجديداليضاف.

عندها يتم زيادة مؤشر النهاية ومؤشر البداية بمقدار واحد (1-)اذا كان مؤشر النهاية يساوي .3

اليحتوي على اي واي ان الطابور فارغ ,ايضا (1-)الن ذلك يعني ان مؤشر البداية يساوي )

(.عنصر

:حذف عنصر من الطابور

يتم , ( (1-)قيمة المؤشر تساوي ) اذا كان يؤشر على الفراغ, يتم فحص مؤشر البداية للطابور .1

.من العناصر ان الطابور خالي على ةلارس استصدار

الذي يؤشر علية يتم حذف العنصر ( 1-اي قيمته التساوي ) على احد العناصراذا كان يؤشر .2

:ويتم ذلك كمايلي, مؤشر البداية

A. ان مجرد تغيير قيمة المؤشر بزيادتة بواحد ) واحد بزيادتة بمقدارمؤشر اليغير موقع

.(يعني ان العنصر تم حذفة

والذي يدل , ( (1-)تسند لهما القيمة ) ناذا كان مؤشر البداية يساوي مؤشر النهاية يصفر المؤشرا .3

.على ان الطابور فارغ

:خزن الطابور بهياكل بيانات مستقرة

.ويكون ذلك بخزن الطابور على شكل مصفوفة يحدد حجمها مسبقا

والتي هي رأس وذيل الطابور والتي يجب ان يحافظ عليهم ةللمصفوف ناو دليال انويكون هناك مؤشر

وتتغير قيمهم عند االضافة (1-)وذيل الطابور بداية يكون بالموقع رأس الطابور. ورلتحديد وضع الطاب

وكيفية تغير قيمة , عناصر لنرى كيفية االضافة والحذف للطابور 5لنفرض لدينا طابور بحجم . والحذف

.المؤشرات

Page 5: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

5

عمليات االضافة والحذف في طابور خطي(: 4)شكل

االضافة والحذف.. لخطيبرنامج للتعامل مع الطابور ا

// Problem : Queue - Data Structure

#include < iostream >

#define QUEUE_SIZE 100

using namespace std;

class Queue {

int q[QUEUE_SIZE];

int first, last;

int count;

public:

Queue();

void enqueue(int x);

int dequeue();

int getSize();

};

Page 6: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

6

Queue::Queue()

{

first = 0;

last = QUEUE_SIZE - 1;

count = 0;

}

void Queue::enqueue(int x)

{

last = (last + 1) % QUEUE_SIZE;

q[last] = x;

count++;

}

int Queue::dequeue()

{

int x = q[first];

first = (first + 1) % QUEUE_SIZE;

count--;

return x;

}

int Queue::getSize()

{

return count;

}

int main()

{

Queue q;

q.enqueue(1);

q.enqueue(2);

q.enqueue(3);

while (q.getSize())

cout << q.dequeue() << endl;

return 0;

}

Page 7: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

7

خزن الطابور في هياكل بيانات ديناميكية

مؤشر فان كل عقدة في هياكل البيانات الديناميكية تحتوي على بيانات مع, كما هو الحال في المكدس

.ر الى عنوان العقدة الالحقةيشي

. الى عقدة الذنب اخر يؤشر الى العقدة الراسية ومؤشر ين احدهما يؤشرالطابور ايضا يحتاج الى مؤشر

(DataItem) كل عقدة تتكون من بيانات Queueخزن لطابور اسمه ال طريقة شكل الالحق يوضحال

.العقدة الالحقة (NextNode )ومؤشر

تمثيل الطابور الخطي باستخدام القوائم الموصولة(: 5)شكل

كيفية والتي سيتم تخصيص فصل لشرح, عملية الوصول الى هذه العقد تتم من خالل استخدام المؤشرات

.عمل القوائم

فاذا كان مؤشر الخلف في نهاية المصفوفة وكان هناك عنصر جديد , المصفوفة لها حجم محدد: سؤال

فما هو الحل؟, يراد اضافته

:هناك اثنان من الحلول

(جدا وهذه مكلفة) تزحيف كل العناصر الى االمام في المصفوفة

بور الدائريثانيا االلتفاف حول المصفوفة وهذا يولد الطا

بداية نبتدأ كال النهايتين بالقيمة . دعنا نستخدم نفس نموذج شفرة البرنامج التي استخدمت في المكدس

فعندما يتم اضافة بيانات الى الطابور فان كال النهايتين ستحصل . للداللة على ان الطابور فارغ( 1-)

وعندما تحذف ,لفية تزاد بمقدار واحدفان النهاية الخ, وعندما تضاف بيانات جديدة. على قيم جديدة

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

.عناصر 5كانت القيمة العظمى لطاقة الطابور هي

. نفرض ان المستخدم اضاف اربع عناصر حذف ثالث عناصر واضاف اثنان اخران مرة اخرىل

حيث (اي سيضيف عنصر واحد فقط) دس سوف اليسمح له باضافة اخر نصف من البياناتالمك

كال النهايتين اعتمادا على االضافة السبب اننا نزيد ونقلل. اليوجد به فراغستقرر ان المكدس

Page 8: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

8

هنا سنخلص الى سؤال مهم هو لماذا . والحذف بشكل اعمى والندرك ان كال النهايتين متعلقتان ببعض

هنا نحتاج الى . فارغ شبه تظهر رسالة بامتالء المكدس في الوقت الذي يكون فية الطابور في الحقيقة

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

Rear = (rear + 1) mod n

Front = (front + 1) mod n

تمثيل الطابور الدائري(: 6)شكل

:مميزات الطابور الدائري

. الطابور الدائري يسمح لكامل المصفوفة بخزن العناصر دون الحاجة الى تزحيف البيانات ضمن الطابور

هذا , ر الدائري تلتف حول نفسها مما يجعل مؤشر النهاية يتجاور مع مؤشر البدايةالمصفوفة بالطابو

بعد عملية الحذف فان المكان الفارغ في . يساعد على الوصول الى اول او اخر عنصر بشكل كفوء

.المصفوفة ممكن ان نستفيد منه لخزن اي عنصر جديد

وعندما , تضاف وذلك بزيادة مؤشر النهاية في الطابور الخطي فان العناصر من الممكن ان تحشر او

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

في الطابور , من جانب اخر. لذلك في الطابور الخطي اليمكن االستفادة من المصفوفة بشكل كامل. مألن

مؤشر النهاية وعليه فان الطابور الدائري يسمح لكامل المصفوفة الدائري فان مؤشر البداية يتجاور مع

للطابور الدائري على الطابور الخطي هو امكانية استخدام فضاء ةالفائدة االساسي. لخزن العناصر

.المصفوفة بشكل اكفأ والتوجد ضياعات بالذاكرة

Page 9: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

9

خوارزمية اضافة عنصر الى الطابور الدائري

اية والنهاية لمعرفة وضعية الطابوربدأ بفحص مؤشر البدت .1

if (front = = (rear+1) % max) اذا كانت هذه العالقة صحيحة

لذلك ,فراغ فيه ممتليء واليوجدفان ذلك يعني ان الطابور

A. يتم طباعة رسالة خطأ تشير الى امتالء الطابور

B. الخروج من دالة االضافة

خاطئة ففي هذة الحالة يتم اضافة واحد الى مؤشر النهاية لتغيير موقعه( 1)كانت العبارة في اذا .2

rear = (rear+1) % max

اضافة العنصر الجديد في الموقع الذي يؤشر عليه مؤشر النهاية .3

Q[rear] = element;

غير قيمة المؤشر عندها ت, اي ان الطابور فارغ, (1-)فحص مؤشر البداية فيما اذا كان في موقع .4

ومؤشر النهاية وذلك باضافة واحد الى مؤشر البداية

If (front == -1 ) front = 0; rear = 0;

خوارزمية حذف عنصر من الطابور الدائري

فان ذلك يعني ان (1-)بداية يتم فحص مؤشري البداية والنهاية فاذا كانت قيمة المؤشران تساوي .1

ن حذف عنصر من طابور فارغالطابور فارغ وبالتالي اليمك

if ((front == rear) && (rear == -1))

A. في هذه الحالة يتم طباعة رسالة خطأ للداللة على ان الطابور فارغ

B. الخروج من دالة الحذف

عندها يتم .. خاطئة( 1)اي اذا كان الطابور ليس بفارغ بمعنى ان العبارة في , في خالف ذلك .2

مؤشر البدايةحذف العنصر الذي يؤشر علية

element = Q[front]

الحظ هنا حالتين.. بواحد بزيادتهاوذلك البدايةيتم تغيير قيمة مؤشر .3

A. هذا يعني ان ) اما ان يكون مؤشري البداية والنهاية متساويين عندها يتم مساواتهم للصفر

(الطابور يحتوي على عنصر واحد فقط

If (front == rear) front=rear = -1

B. كان العبارة في اما اذا(A) خاطئة اي ان الطابور يحتوي على اكثر من عنصر واحد

عندها يضاف واحد الى مؤشر البداية كما في ادناه

front = (front + 1) % max

تم حجز العنصر المراد حذفة بمتغير وذلك لغرض طباعته الحقا او اجراء اي ( 2)في الخطوة : مالحظة

لم تكن قيمة العنصر المحذوف مهمة ه الخطوة اذاويمكن اهمال هذ, عملية عليه

من خوارزميتي االضافة ( 3 ,2)ل القاريء لماذا استخدام باقي القسمة في الخطوة أربما يس: مالحظة

تعني حجم الطابور الدائري وبما اننا نستخدم طابور دائري فهناك (max)والجواب هنا ان . والحذف

الطابور فاذا امتأل, منه وبالتالي يتغير موقع مؤشر النهاية والبداية احتمال امتالء الطابور وحذف عناصر

Page 10: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

10

لنتخيل الطابور ممتأل ولكن عدد من العناصر تم حذفها ) يكون مؤشر النهاية على اخر موقع في الطابور

فاذا اردنا اضافة جديدة فان المؤشر ستزاد قيمته بواحد وبالتالي ( هنا سيكون فراغ في بداية الطابور

او ( 1)كون قيمة مؤشر النهاية تتكون قيمته اكبر من القيمة العليا لحجم الطابور لذلك نعمل باقي القسمة لس

.ونفس الشيء ينطبق على مؤشر البداية, اي قيمة اخرى ضمن مدى حجم الطابور

امثلة توضيحية

.ولنرى كيفية االضافة والحذف عليها 5حجمها هو . هو طابور دائري Aلنفرض ان

62 ,42, 22دءا فان الطابور خالي ولذلك سنعمل على اضافة العناصر التالية ب

:ومواقعها سنتابع عملية االضافة والحذف من خالل االشكال الرسومية والتي سنوضح فيها المؤشرات

اي ان الطابور فارغ (1-)بداية فان مؤشر البداية ومؤشر النهاية قيمتهم .1

اضافة عناصر الى الطابور الدائري(: 7)شكل

الى الطابور 12و 52اضافة العنصرين

Page 11: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

11

اضافة عنصرين الى الطابور الدائري(: 8)شكل

الى الطابور الدائري 32 اخر ليكن عنصرلنجرب اضافة االن.

(وجود فراغ للتاكد من)العالقة التالية ستخدامن اوال

If ( front == ((rear +1) % size))

Front = 0

(Rear + 1) % size = (4+1) % 5 = 0

لذلك اليمكن االضافة وهذا يعني ان الطابور ممتليء, اذن العالقة اعاله صحيحة

االن لنحذف عنصر

خدام العالقة التالية وذلك باستوجود عناصر من اوال نتاكد

If (Front == Rear) && (Rear = -1)

اذا كانت هذه العبارة صحيحة هنا يكون الطابور فارغ

.اما اذا لم تكن صحيحة فهذا يعني وجود عناصر في الطابور اي الطابور ليس فارغ

(ةيعني العبارة خاطئ)اي غير متساويين (front = 0 && rear = 4)في هذه الحالة فان

هنا يتم زيادة مؤشر البداية وبذلك فان العنصر الذي كان يؤشر عليه مؤشر البداية يتم حذفه

وكمايلي

Front = (Front + 1) % size

= (0 + 1) % 5

= 1 % 5

Front = 1

Page 12: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

12

الطابور الدائري بعد حذف احد عناصرة( : 9)شكل

لنحذف عنصر اخر نتبع نفس الطريقة

Front = ( Front + 1) % size

= (1 +1 ) % 5

= 2 % 5

= 2

الطابور الدائري بعد حذف عنصر ثان منه(: 12)شكل

مثال اخر توضيحي

الحظ الطابور الخطي في الشكل ادناه حيث التوجد فرصة الضافة عنصر جديد في الطابور بعد ان تكون

المواقع الثالث االولى فارغة

طابور خطي(: 11)شكل

ونبدأ بعملية االضافة 2على الموقع Rearسنضبط المؤشر ,وعند اضافة عنصر في الطابور الدائري

كما في الشكل frontاقل من المؤشر rearللعناصر طالما المؤشر

Page 13: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

13

طابور دائري(: 12)شكل

نسبة لطابور بال, تمثيل الطابور الدائري موضحة بالشكل ادناه, تنفيذ هذه الفكرة تسمى الطابور الدائري

يؤشر على rearومؤشر النهاية 2فان مؤشر البداية يؤشر على الموقع كما الشكل ادناه 4دائري بحجم

.وهذا يعني ان عنصرين مخزونه في الطابور الدائري( 13)كما في الشكل 1الموقع

الطابور الدائري بعد االضافة( : 13)شكل

والتي هي موضحة في االشكال التالية, ابور الدائرياالن لنطبق مجموعة من العمليات على الط

45, 22اضافة البيانات

الطابور الدائري بعد مأله بالعناصر(: 14)شكل

حذف اثنين من البيانات

Page 14: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

14

الطابور الدائري بعد حذف اثنين من عناصرة(: 15)شكل

29, 77اضافة اثنين من البيانات

ء بعد اضافة عناصر لهالطابور الدائري الممتلي(: 16)شكل

برنامج يوضح عمليات الطابور الدائري من اضافة وحذف

# include <iostream.h>

# include <process.h>

# include <conio.h>

int display_menu();

class circularqueue

{

int arr[10];

int front,rear;

int size;

public:

circularqueue()

{

front=0;

rear=0;

size=10;

}

void display();

void enqueue();

Page 15: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

15

void delete_element();

};

void circularqueue :: display()

{

cout<<endl;

if(front!=0 && rear!=0)

{

int i=front;

cout<<"arr["<<i<<"] :"<<arr[i]<<endl;

while(i!=rear)

{

i=(i % size)+1;

cout<<"arr["<<i<<"] :"<<arr[i]<<endl;

}

}

else

{

cout<<"Queue is empty"<<endl;

}

getch();

}

void circularqueue :: enqueue()

{

cout<<endl;

if(front==0 && rear==0)

{

cout<<"Enter Number to enqueue at Position arr["<<rear+1<<"] :";

cin>>arr[1];

rear=1;

front=1;

}

else

{

int next=(rear % size)+1;

Page 16: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

16

if(next==front)

{

cout<<"Queue is Full ...";

getch();

}

else

{

cout<<"Enter Number to enqueue at Position arr["<<next<<"] :";

cin>>arr[next];

rear=next;

}

}

}

void circularqueue :: delete_element()

{

cout<<endl;

if(rear==0 && front==0)

{

cout<<"Queue is empty ...";

getch();

return;

}

if(rear==front)

{

rear=0;

front=0;

}

else

{

front=(front % size)+1;

}

}

void main()

{

circularqueue cq1;

while(1)

{

switch(display_menu())

Page 17: هياكل البيانات - الطابور

جامعة الكوفة الطابور نضال العبادي. د.م.ا

17

{

case 1: cq1.enqueue();

break;

case 2: cq1.delete_element();

break;

case 3: cq1.display();

break;

case 4: exit(1);

}

}

}

int display_menu()

{

int c;

clrscr();

cout<<endl;

cout<<"| 1 | : Enqueue element"<<endl;

cout<<"| 2 | : Delete element"<<endl;

cout<<"| 3 | : Display"<<endl;

cout<<"| 4 | : Exit"<<endl;

cout<<"Enter your Choice :";

cin>>c;

return c;

}