"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > تنفيذ قائمة الانتظار باستخدام المكدس

تنفيذ قائمة الانتظار باستخدام المكدس

تم النشر بتاريخ 2024-12-16
تصفح:861

Queue وStack عبارة عن هياكل بيانات بسيطة إلى حد ما نستخدمها في الترميز اليومي. في واقع الأمر، يمكن اعتبارها أسهل الهياكل للحفاظ على البيانات.

خلال المقالة، سأستخدم DS للإشارة إلى بنية البيانات.

قائمة الانتظار هي DS تعمل على مبدأ FIFO. يُسمح للبيانات التي تأتي أولاً بالخروج أولاً. هناك طرق عديدة لتنفيذ قوائم الانتظار. نحن أحرار في استخدام المصفوفات، والقائمة المرتبطة، وغيرها الكثير. ولكن هنا، أنا على وشك مناقشة تنفيذ قائمة الانتظار باستخدام DS آخر يسمى Stack.

الآن، نعلم جميعًا أن Stack هو DS يعمل على مبدأ LIFO. أفكر دائمًا في وضع الكتب فوق بعضها البعض، لذا لا تتردد في استخدام هذا التشبيه إذا كان يساعدك على التصور.

لقد صادفت هذا السؤال في hackerrank حيث طلبوا منا تنفيذ قائمة الانتظار باستخدام مكدسين. يبدو الأمر بسيطًا، أليس كذلك؟ خذ لحظة للتفكير في كيفية تحقيق ذلك.

ربما تكون قد توصلت إلى بعض الحلول نظرًا لوجود العديد من الطرق للقيام بذلك. فلماذا لا تجرب ذلك مباشرة؟

سؤال

الآن، بالنسبة لأولئك الذين حاولوا وحصلوا على "خطأ المهلة" ولمن لم يكلفوا أنفسهم عناء المحاولة، اسمحوا لي أن أشرح لكم الحل الأبسط والأسهل لهذه المشكلة.

قم أولاً بإلقاء نظرة على كيفية تنفيذ المكدس.

Implementing Queue using Stack

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

الآن، بنفس الطريقة بالنسبة لقائمة الانتظار، قمنا بتهيئة مكدسين مختلفين. واحدة للقائمة وواحدة للقائمة.

نستخدم enqueueStack بشكل مشابه للمكدس فقط لدفع البيانات في نهاية القائمة. لكن بالنسبة إلى dequeueStack، نعلم أن وظيفة البوب ​​للمكدس تزيل العنصر من العنصر الأخير، لذا ما نفعله هو؛ نقوم بعكس enqueueStack ونضعه في dequeueStack. وهكذا، يصبح العنصر الأول من enqueueStack هو العنصر الأخير في dequeueStack، ويصبح العنصر الثاني من enqueueStack هو العنصر الثاني الأخير في dequeueStack، وهكذا. والآن، إذا استخدمنا وظيفة pop لـ dequeueStack، فسوف تزيل العنصر الأول الذي دفعناه، وبالتالي محاكاة قائمة الانتظار.

لا تقلق إذا كان هذا يبدو مربكًا الآن! بمجرد رؤية الكود ستدرك ما أتحدث عنه. في الواقع، قم بإلقاء نظرة عليه الآن!

Implementing Queue using Stack

قد تتساءل عن سبب هذه الفحوصات الإضافية. مثل التحقق مما إذا كان dequeueStack فارغًا أم لا. إذا لم نتحقق من ذلك في البداية. ستجلس عناصر enqueueStack عن طريق الانعكاس في dequeueStack وما يحدث هو أن عنصر dequeue Stacks الذي كان من المفترض أن يكون في البداية ينتهي به الأمر الآن إلى أن يكون الأخير. لذلك يجب أولاً إفراغ dequeueStack كما هو موضح في الكود.

وبالمثل، تقوم printFront بطباعة العنصر الذي من المفترض أن يكون في مقدمة قائمة الانتظار.

بعد هذا التنفيذ، نقرأ المدخلات من STDIN ونطبع المخرجات إلى STDOUT.

مدخلاتنا هي إلى حد ما مثل هذا:

Implementing Queue using Stack

والوظيفة الرئيسية الكاملة هي:

Implementing Queue using Stack

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

بيان الافراج هذه المقالة مستنسخة على: https://dev.to/ujj1225/implementing-queue-using-stack-5a7h?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3