المكدس في Java عبارة عن بنية بيانات، تشبه إلى حد كبير قائمة الانتظار أو المصفوفة أو القائمة المرتبطة أو الشجرة . ما يختلف عن الآخرين هو أن Java Stack يعتمد على مبدأ Last In، First Out (LIFO). ما يعنيه هذا هو أنه عند استخدام الأمرين لإضافة عنصر وإزالته من المكدس، فإن أول عنصر تقوم بإزالته سيكون دائمًا آخر عنصر قمت بإضافته. دعونا نلقي نظرة فاحصة على Java Stack Class
استكشاف فئة Java Stack
تعد فئة Java Stack امتدادًا لفئة Vector ، والتي تعمل في حد ذاتها على توسيع فئة القائمة . نظرًا لأن المتجهات قابلة للتغيير ويمكن أن تنمو وتتقلص مع متطلبات العناصر الموجودة بداخلها، يمكن لـ Stack أيضًا تغيير الأحجام حسب الطلب. يضيف امتداد فئة Vector خمس عمليات تحول Vector إلى Stack . وهذه العمليات الخمس هي:- .push(E item) - يضع عنصرًا في الجزء العلوي من المكدس
- .pop() - يزيل العنصر الموجود أعلى المكدس ويعيده كقيمة للدالة
- .peek() – ينظر إلى العنصر الموجود أعلى المكدس دون إزالته
- .empty() - دالة منطقية لاختبار ما إذا كان المكدس فارغًا أم لا. إرجاع 0 أو 1.
- .search(Object o) - يبحث عن o ويعيد موضعه. القيمة مبنية على 1 وليست مبنية على 0
ترميز مثال Java Stack
الآن بعد أن عرفنا وظائف المكدس ، فلنكتب مثالًا لمكدس جافا. تعد المكدسات مفيدة جدًا للتعامل مع البيانات التي يجب تخزينها مؤقتًا واسترجاعها بسرعة. نظرًا لأن المكدس هو LIFO، فهو مفيد بشكل استثنائي لاجتياز العقدة عند استكشاف بنية بيانات الشجرة. قبل أن ندخل في كل ذلك، دعونا ننشئ مكدسًا أساسيًا. رمز تنفيذ المكدس هو كما يلي:import java.util.*;
class Main {
public static void main(String[] args) {
Stack<Integer> stackExample = new Stack<Integer>();
هذا كل ما عليك فعله لإنشاء Stack فارغ . يمكنك أيضًا الإعلان عنها ببساطة دون الإعلان عن نوع البيانات باستخدام:
Stack example = new Stack();
تذكر أنه نظرًا لأن المكدسات قابلة للتغيير، فعندما ندفع العناصر إلى المكدس، سيتم ضبط حجمها تلقائيًا. الآن دعونا نلقي نظرة على كيفية استخدام وظائف Stack .
تنفيذ جافا المكدس
دعونا نلقي نظرة على كيفية استخدام الطرق الخمس التي اكتشفناها بإيجاز سابقًا. من السهل تذكر تطبيق Java Stack إذا كنت تعتقد أنه عبارة عن مجموعة من اللوحات. تضع الأطباق على الكومة، ولكن للحصول على طبق، لا تذهب إلى الأسفل، بل تحصل على واحد من الأعلى. آخر ما ترتديه هو أول ما تخلعه. بتوسيع مثالنا السابق باستخدام stackExample ، تكون الوظائف كما يلي:يدفع
// pushing integers onto the Stack
stackExample.push(5);
stackExample.push(10);
في هذه المرحلة، سنقوم بإظهار الوظائف الأخرى كما لو كنا قد دفعنا هذين العددين الصحيحين إلى مثال مكدس Java في كل مرة.
البوب
//popping integers off of the Stack
System.out.println(stackExample.pop());
System.out.println(stackExample.pop());
انتاج:
10
5
فارغ
الآن، لنفترض أنك تريد إزالة كافة العناصر من المكدس ولكنك غير متأكد من عدد العناصر الموجودة. يمكنك دمج الدالة Boolean.isEmpty() مع شرط مسبق أثناء التكرار لإخراج كافة العناصر من Stack . انظر إلى كيفية تنفيذ مكدس جافا هذا.while(!stackExample.isEmpty()) {
System.out.println(stackExample.pop());
}
انتاج |
10
5
نظرة خاطفة
يمكننا استخدام .peek() كتطبيق مكدس في Java لإلقاء نظرة على العنصر التالي في المكدس دون إزالته.System.out.println(stackExample.peek());
انتاج |
10
إذا قمنا بإخراج المكدس وطباعته ، فسوف يُرجع 10 و5 لأن الرقم 10 لا يزال موجودًا في المكدس. لقد نظرنا إليه للتو، ولم نقم بإزالته باستخدام وظيفة البوب. تعد وظيفة النظرة الخاطفة أداة رائعة لـ Stack s في Java.
يبحث
إذا أردنا العثور على عنصر محدد، فإن تنفيذ الأكوام في Java يستخدم .search(e); للعثور عليه.System.out.println(stackExample.search(5));
انتاج |
2
تذكر أن هذا لأننا نعد من أعلى المكدس وأن Java Stack تبدأ من 1، وليس 0 مثل Array . لذا، بالنظر إلى المكدس، فهو (10) --> (5)، والرقم 5 يقع في المكان رقم 2. إذا حاولت العثور على عنصر غير موجود في المكدس ، فستحصل على -1 كمخرج.
التكرار
عند العمل مع أي مجموعة، قد تكون هناك أوقات تحتاج فيها إلى البحث عن عناصر متعددة. لحفظ التعقيد والاضطرار إلى البحث في المكدس عدة مرات، يمكنك استخدام التكرار. نظرًا لأن Stack في Java يعمل على توسيع فئة القائمة ، فهناك العديد من الخيارات للتكرار. واحدة من أسهل هذه الطرق هي استخدام وظيفة ListIterator فقط . يعد ListIterator رائعًا لأنه يتيح لك اجتياز المكدس من أعلى إلى أسفل أو من أسفل إلى أعلى باستخدام .hasPrevious() أو .hasNext() . وهنا كيف يبدو:ListIterator<Integer> exampleIterator = stackExample.listIterator(stackExample.size());
while (exampleIterator.hasPrevious()) {
int iteration = exampleIterator.previous();
System.out.println(iteration);
}
انتاج |
10
5
ضع في اعتبارك أنه عند التكرار عبر Stack s في Java، فإنك لا تقوم بإزالة أي عناصر فيه. يتيح لك التكرار بشكل أساسي إلقاء نظرة خاطفة على كل عنصر في المكدس بالترتيب. عند القيام بذلك، يمكنك البحث عن المواقع التي توجد بها عناصر معينة ومن ثم المرور عبرها ومعالجتها. يمكنك حسابها أو حذفها أو حتى تغييرها إذا لزم الأمر.
GO TO FULL VERSION