English  
إغلاق الإعلان

كتب البرمجة بلغة الباسكال (5,227 كتاب)

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

عرض المزيد

تحقيق المكدس بلغة الباسكال (معلومة)

أبسط طريقة لتعريف المكدس هي استخدام المصفوفة في تمثيل المكدس، سوف نصرح عن المكدس كما في حالة التصريح عن المسجل بلغة الباسكال :

Const maxstack = 100; Type stack = record; Item : array [1..maxstack] of integer; Top : 0..maxstack; Var s:stack

من التصريحات المعطاة نجد أن عناصر المكدس s الموجودة في المصفوفة s.item هي أعداد صحيحة وأن المكدس لن يحتوي على من أكثر من maxstack عنصر، ويمكن تغيير عناصر المكدس بتغيير نوع عناصر المصفوفة s.item.بما أن top هو حقل في المسجل stack فإن قيمة المؤشر الذي يدل على عنصر القمة هو s.top. إذا كانت قيمة s.top = 3 فهذا يدل على أن المكدس يحتوي على ثلاثة عناصر هي s.item[1] وs.item[2] وs.item[3]. إذا طبقنا عملية pop على المكدس فإن قيمة s.top يجب أن تعدل لتصبح مساوية 2 ويصبح عنصر القمة هو [s.item[2، بينما إذا طبقنا عملية push على المكدس فإن قيمة s.top يجب أن تعدل لتصبح مساوية 4 ويصبح عنصر القمة هو [s.item[4. للبدء بمكدس فارغ يجب أن نكتب : s.top=0. بالاعتماد على ما سبق يمكن كتاية التابع (empty(s بلغة الباسكال كما يلي:

Function Empty(s:stack) : Boolean; Begin If s.stop = 0 Then empty =true; Else empty =false; End;

ويمكن استدعاء هذا التابع بالشكل :

If Empty(s) Then {المكدس فارغ} Else {المكدس ليس فارغاً}

تحقيق عملية الطرح

ينفذ التابع (Pop(s الذي يأخذ بعين الاعتبار حالة كون المكدس فارغ كما يلي:

  • إذا كان المكدس فارغاً فإنه يطبع رسالة تدل على الخطأ.
  • وإلا يتم سحب عنصر القمة من المكدس وإعطاء هذا العنصر إلى البرنامج المستدعي.

ويكتب هذا التابع بلغة الباسكال كما يلي :

Function Pop (var s:stack) : integer Begin If empty(s) Then error('stack underflow'); Else Begin Pop =s.item[s.top]; s.top =s.top - 1; End; End;

تحقيق عملية الدفع

يتم ادخال عنصر إلى المكدس عن طريق زيادة s.top بمقدار 1 ومن ثم إدخال x إلى المصفوفة s.item. يُكتب الإجراء الذي يقوم بذلك على الشكل التالي:

Procedure push (var s:stack; x:integer) Begin s.top = s.top + 1; s.item[s.top] = x; End;

قبل استدعاء الاجراء push يجب التأكد من أن المكدس غير ممتلئ وبالتالي يجب تعديل الجراء السابق بحيث يصبح كالآتي:

Procedure Push (var s:stack; x:integer) Begin If s.top = maxstack Then error('stack overflow'); Else Begin s.top = s.top + 1; s.item[s.top] = x; End; End;

المصدر: wikipedia.org
إغلاق الإعلان
إغلاق الإعلان