تمارين
مراجعة المفاهيم
أي عنصر يخرج أولاً من المكدس أو الطابور؟
جهّز مكدساً فارغاً S وطابوراً فارغاً Q. نفّذ على كل منهما التسلسل نفسه من العمليات:
الخطوة 1: أضف A.
الخطوة 2: أضف B.
الخطوة 3: أزل عنصراً واحداً وسجّله.
الخطوة 4: أضف C.
الخطوة 5: واصل إزالة العناصر وتسجيلها حتى تفرغ الحاوية.
اكتب ترتيب إزالة العناصر من S ومن Q. واشرح الفرق باستخدام "آخر ما يدخل يخرج أولاً" أو "أول ما يدخل يخرج أولاً".
الإجابة
ترتيب الإزالة من المكدس S هو B, C, A. بعد إضافة العنصرين A, B، يُخرَج العنصر الأحدث إضافةً، وهو B، أولاً. وبعد إضافة C، يُخرَج C, A بهذا الترتيب. وهذا هو مبدأ "آخر ما يدخل يخرج أولاً".
ترتيب الإزالة من الطابور Q هو A, B, C. بعد إضافة العنصرين A, B، يُزال العنصر الأسبق إضافةً، وهو A، أولاً. وبعد إضافة C، يُزال B, C بهذا الترتيب. وهذا هو مبدأ "أول ما يدخل يخرج أولاً".
ماذا يحدث عندما تتجاوز مؤخرة الطابور نهاية المصفوفة؟
يُنفَّذ طابور بمصفوفة دائرية طولها 5، وفهارسها 0–4. حالياً front = 3 وsize = 2؛ ويُخزَّن A, B عند الفهرسين 3 و4 على الترتيب.
- عند إدخال
Cإلى الطابور، عند أي فهرس ينبغي تخزينC؟ وما قيمةsizeبعد الإدخال؟ - بعد ذلك، أخرِج عنصراً واحداً من الطابور. أي عنصر يُزال؟ وما القيمتان الجديدتان لـ
frontوsize؟ - ما الترتيب المنطقي من المقدمة إلى المؤخرة الآن؟ وهل تتطلب عملية الإخراج تحريك بقية العناصر في المصفوفة؟ ولماذا؟
الإجابة
-
موضع العنصر الجديد هو
(front + size) % 5 = (3 + 2) % 5 = 0، لذا يُخزَّنCعند الفهرس 0. وبعد الإدخال تصبحsize = 3. -
تُزيل عملية الإخراج عنصر المقدمة الحالي
A. وفهرس المقدمة الجديد هو(3 + 1) % 5 = 4، إذنfront = 4وsize = 2. -
الترتيب المنطقي للعناصر الصالحة هو
B, C، حيث يقعBعند الفهرس 4 وCعند الفهرس 0. وتتطلب عملية الإخراج تغييرfrontوsizeفقط. وتستخدم المصفوفة الدائرية عملية باقي القسمة لإعادة الفهرس إلى البداية، فلا حاجة إلى إزاحة بقية العناصر إلى الأمام.
العمليات على طرفي الطابور المزدوج
هنا يضيف push_first عنصراً في المقدمة، ويضيف push_last عنصراً في المؤخرة،
ويزيل pop_first عنصراً من المقدمة، ويزيل pop_last عنصراً من المؤخرة.
نفّذ العمليات التالية على طابور مزدوج فارغ deq:
push_last(A)push_last(B)push_first(C)pop_last()push_last(D)pop_first()
- ما العنصران اللذان تعيدهما عمليتا الإخراج؟
- بعد اكتمال جميع العمليات، ما العناصر المتبقية من المقدمة إلى المؤخرة؟
- افحص العمليات الست. هل يستطيع طابور يسمح بالإضافة في المؤخرة فقط والإزالة من المقدمة فقط تنفيذها جميعاً؟ إن لم يكن، فحدد العمليات التي لا يستطيع تنفيذها. ثم بيّن هل يستطيع الطابور المزدوج تنفيذها، مع شرح السبب.
الإجابة
بعد الخطوات الثلاث الأولى، يصبح الطابور المزدوج من المقدمة إلى المؤخرة [C, A, B].
-
يزيل
pop_last()العنصرB. وبعد إضافةDيصبح الطابور المزدوج[C, A, D]، ثم يزيلpop_first()العنصرC. -
يتبقى
[A, D]. -
لا يستطيع طابور يسمح بالإضافة في المؤخرة فقط والإزالة من المقدمة فقط تنفيذ جميع العمليات. فالخطوة 3،
push_first(C)، تتطلب الإضافة في المقدمة، والخطوة 4،pop_last()، تتطلب الإزالة من المؤخرة. وكلتاهما خارج العمليات التي يدعمها هذا الطابور. أما الطابور المزدوج فيسمح بالإضافة والإزالة من كلا الطرفين، لذا يستطيع تنفيذ العمليات الست جميعاً.
تمارين برمجية
فحص تسلسل الأقواس
معطى سلسلة نصية s تحتوي فقط على الأنواع الثلاثة من الأقواس (), []، و{}، استخدم مكدساً لتحديد ما إذا كانت السلسلة صحيحة.
يجب أن يستوفي التسلسل الصحيح شرطين معاً: أن يطابق كل قوس إغلاق نوع أقرب قوس فتح غير مطابق، وألا يتبقى أي قوس فتح غير مطابق بعد الاجتياز. أعد قيمة منطقية للنتيجة.
تلميحات
- يمكنك إنشاء تعيين (mapping) من كل قوس إغلاق إلى قوس الفتح المطابق له
- عند مصادفة قوس إغلاق، تحقق أولاً مما إذا كان المكدس فارغاً، ثم تحقق مما إذا كانت القمة مطابقة
- يجب أن يكون المكدس فارغاً أيضاً بعد الاجتياز
LeetCode{ .rounded-button .exercise-button target="_blank" rel="noopener noreferrer" }