ال كومة عبارة عن بنية بيانات خطية تُستخدم لتخزين مجموعة الكائنات. تعتمد على آخر في الخروج أولا (ليفو). مجموعة جافا يوفر إطار العمل العديد من الواجهات والفئات لتخزين مجموعة الكائنات. واحد منهم هو فئة المكدس الذي يوفر عمليات مختلفة مثل الدفع والبوب والبحث وما إلى ذلك.
في هذا القسم سنناقش فئة جافا المكدس ، إنه طُرق، و ينفذ بنية بيانات المكدس في أ برنامج جافا . ولكن قبل الانتقال إلى فئة Java Stack، قم بإلقاء نظرة سريعة على كيفية عمل المكدس.
تحتوي بنية بيانات المكدس على أهم عمليتين يدفع و البوب . تقوم عملية الدفع بإدراج عنصر في المكدس وتقوم عملية البوب بإزالة عنصر من أعلى المكدس. دعونا نرى كيف يعملون على المكدس.
بينما والقيام أثناء حلقة في جافا
دعونا ندفع 20، 13، 89، 90، 11، 45، 18، على التوالي في المكدس.
دعونا نزيل (فرقعة) 18 و45 و11 من المكدس.
المكدس الفارغ: إذا لم يكن للمكدس أي عنصر يُعرف باسم كومة فارغة . عندما تكون المكدس فارغة تكون قيمة المتغير العلوي هي -1.
عندما ندفع عنصرًا إلى المكدس، يكون الجزء العلوي زاد بنسبة 1 . في الشكل التالي،
- ادفع 12، الأعلى = 0
- ادفع 6، الأعلى = 1
- ادفع 9، الأعلى = 2
عندما نخرج عنصرًا من المكدس، تكون قيمة القمة انخفض بنسبة 1 . في الشكل التالي، لدينا 9.
ويبين الجدول التالي القيم المختلفة للأعلى.
جافا فئة المكدس
في جافا، كومة هي فئة تندرج ضمن إطار المجموعة الذي يمتد المتجه فصل. كما أنها تنفذ واجهات قائمة، مجموعة، قابلة للتكرار، قابلة للاستنساخ، قابلة للتسلسل. وهو يمثل مكدس الكائنات LIFO. قبل استخدام فئة Stack، يجب علينا استيراد ملفjava.utilطَرد. تم ترتيب فئة المكدس في التسلسل الهرمي لإطار عمل المجموعات، كما هو موضح أدناه.
منشئ فئة المكدس
تحتوي فئة Stack فقط على المنشئ الافتراضي الذي يخلق مكدس فارغ.
public Stack()
إنشاء مكدس
إذا أردنا إنشاء مكدس، فقم أولاً باستيراد ملفjava.utilحزمة وإنشاء كائن من فئة المكدس.
Stack stk = new Stack();
أو
Stack stk = new Stack();
حيث يشير النوع إلى نوع المكدس مثل Integer وString وما إلى ذلك.
طرق فئة المكدس
يمكننا إجراء عمليات الدفع والبوب والنظرة الخاطفة والبحث على المكدس. توفر فئة Java Stack بشكل أساسي خمس طرق لتنفيذ هذه العمليات. إلى جانب ذلك، فإنه يوفر أيضًا جميع أساليب فئة جافا المتجهات .
طريقة | المعدل والنوع | وصف الطريقة |
---|---|---|
فارغ() | منطقية | تتحقق الطريقة من أن المكدس فارغ أم لا. |
دفع (العنصر E) | و | تقوم الطريقة بدفع (إدراج) عنصر إلى أعلى المكدس. |
البوب () | و | تقوم الطريقة بإزالة عنصر من أعلى المكدس وإرجاع نفس العنصر كقيمة تلك الوظيفة. |
نظرة خاطفة () | و | تنظر الطريقة إلى العنصر العلوي للمكدس دون إزالته. |
بحث (كائن س) | كثافة العمليات | تبحث الطريقة عن الكائن المحدد وترجع موضع الكائن. |
طريقة فئة المكدس الفارغة ().
ال فارغ() طريقة فئة المكدس تحقق من أن المكدس فارغ أم لا. إذا كانت المكدس فارغة، فإنها تُرجع صحيحًا، وإلا تُرجع خطأ. يمكننا أيضًا استخدام طريقة isEmpty() لفئة Vector .
بناء الجملة
public boolean empty()
عائدات: تُرجع الطريقة صحيحًا إذا كانت المكدس فارغة، وإلا تُرجع خطأ.
في المثال التالي، قمنا بإنشاء مثيل لفئة Stack. بعد ذلك، قمنا باستدعاء الطريقة الفارغة () مرتين. في المرة الأولى التي يعود فيها حقيقي لأننا لم ندفع أي عنصر إلى المكدس. بعد ذلك، قمنا بدفع العناصر إلى المكدس. مرة أخرى قمنا باستدعاء الطريقة الفارغة () التي تُرجع خطأ شنيع لأن المكدس ليس فارغا.
StackEmptyMethodExample.java
import java.util.Stack; public class StackEmptyMethodExample { public static void main(String[] args) { //creating an instance of Stack class Stack stk= new Stack(); // checking stack is empty or not boolean result = stk.empty(); System.out.println('Is the stack empty? ' + result); // pushing elements into stack stk.push(78); stk.push(113); stk.push(90); stk.push(120); //prints elements of the stack System.out.println('Elements in Stack: ' + stk); result = stk.empty(); System.out.println('Is the stack empty? ' + result); } }
انتاج:
Is the stack empty? true Elements in Stack: [78, 113, 90, 120] Is the stack empty? false
طريقة دفع فئة المكدس ().
تقوم الطريقة بإدراج عنصر في الجزء العلوي من المكدس. إنه يعمل بنفس طريقة addElement(item) الخاصة بفئة Vector. يمر المعلمة غرض ليتم دفعها إلى المكدس.
بناء الجملة
public E push(E item)
معامل: عنصر ليتم دفعه إلى أعلى المكدس.
عائدات: تقوم الطريقة بإرجاع الوسيطة التي مررناها كمعلمة.
طريقة فئة المكدس البوب ().
تقوم الطريقة بإزالة كائن في الجزء العلوي من المكدس وإرجاع نفس الكائن. يرمي EmptyStackException إذا كانت المكدس فارغة.
بناء الجملة
public E pop()
عائدات: تقوم بإرجاع كائن موجود في الجزء العلوي من المكدس.
لنقم بتنفيذ المكدس في برنامج Java وتنفيذ عمليات الدفع والبوب.
StackPushPopExample.java
import java.util.*; public class StackPushPopExample { public static void main(String args[]) { //creating an object of Stack class Stack stk = new Stack(); System.out.println('stack: ' + stk); //pushing elements into the stack pushelmnt(stk, 20); pushelmnt(stk, 13); pushelmnt(stk, 89); pushelmnt(stk, 90); pushelmnt(stk, 11); pushelmnt(stk, 45); pushelmnt(stk, 18); //popping elements from the stack popelmnt(stk); popelmnt(stk); //throws exception if the stack is empty try { popelmnt(stk); } catch (EmptyStackException e) { System.out.println('empty stack'); } } //performing push operation static void pushelmnt(Stack stk, int x) { //invoking push() method stk.push(new Integer(x)); System.out.println('push -> ' + x); //prints modified stack System.out.println('stack: ' + stk); } //performing pop operation static void popelmnt(Stack stk) { System.out.print('pop -> '); //invoking pop() method Integer x = (Integer) stk.pop(); System.out.println(x); //prints modified stack System.out.println('stack: ' + stk); } }
انتاج:
stack: [] push -> 20 stack: [20] push -> 13 stack: [20, 13] push -> 89 stack: [20, 13, 89] push -> 90 stack: [20, 13, 89, 90] push -> 11 stack: [20, 13, 89, 90, 11] push -> 45 stack: [20, 13, 89, 90, 11, 45] push -> 18 stack: [20, 13, 89, 90, 11, 45, 18] pop -> 18 stack: [20, 13, 89, 90, 11, 45] pop -> 45 stack: [20, 13, 89, 90, 11] pop -> 11 stack: [20, 13, 89, 90]
طريقة نظرة خاطفة على فئة المكدس ().
إنه ينظر إلى العنصر الموجود في الجزء العلوي من المكدس. ويرمي أيضا EmptyStackException إذا كانت المكدس فارغة.
بناء الجملة
public E peek()
عائدات: تقوم بإرجاع العناصر العليا للمكدس.
دعونا نرى مثالاً على طريقة peek().
StackPeekMethodExample.java
import java.util.Stack; public class StackPeekMethodExample { public static void main(String[] args) { Stack stk= new Stack(); // pushing elements into Stack stk.push('Apple'); stk.push('Grapes'); stk.push('Mango'); stk.push('Orange'); System.out.println('Stack: ' + stk); // Access element from the top of the stack String fruits = stk.peek(); //prints stack System.out.println('Element at top: ' + fruits); } }
انتاج:
Stack: [Apple, Grapes, Mango, Orange] Element at the top of the stack: Orange
طريقة البحث عن فئة المكدس ().
تبحث الطريقة عن الكائن الموجود في المكدس من الأعلى. يقوم بتوزيع المعلمة التي نريد البحث عنها. تقوم بإرجاع الموقع المستند إلى 1 للكائن في المكدس. يعتبر الكائن العلوي للمكدس على مسافة 1.
لنفترض أن o هو كائن في المكدس نريد البحث عنه. تقوم الطريقة بإرجاع المسافة من أعلى المكدس للحدث الأقرب إلى أعلى المكدس. يستخدم يساوي () طريقة للبحث عن كائن في المكدس.
بناء الجملة
public int search(Object o)
معامل: o هو الكائن المطلوب البحث عنه.
ما هو الهاشتاج في جافا
عائدات: تقوم بإرجاع موقع الكائن من أعلى المكدس. إذا أعادت -1، فهذا يعني أن الكائن ليس على المكدس.
دعونا نرى مثالاً على طريقة البحث ().
StackSearchMethodExample.java
import java.util.Stack; public class StackSearchMethodExample { public static void main(String[] args) { Stack stk= new Stack(); //pushing elements into Stack stk.push('Mac Book'); stk.push('HP'); stk.push('DELL'); stk.push('Asus'); System.out.println('Stack: ' + stk); // Search an element int location = stk.search('HP'); System.out.println('Location of Dell: ' + location); } }
عمليات جافا المكدس
حجم المكدس
يمكننا أيضًا العثور على حجم المكدس باستخدام طريقة size() الخاصة بفئة Vector. تقوم بإرجاع العدد الإجمالي للعناصر (حجم المكدس) في المكدس.
بناء الجملة
public int size()
دعونا نرى مثالاً على طريقة size() لفئة Vector.
StackSizeExample.java
import java.util.Stack; public class StackSizeExample { public static void main (String[] args) { Stack stk = new Stack(); stk.push(22); stk.push(33); stk.push(44); stk.push(55); stk.push(66); // Checks the Stack is empty or not boolean rslt=stk.empty(); System.out.println('Is the stack empty or not? ' +rslt); // Find the size of the Stack int x=stk.size(); System.out.println('The stack size is: '+x); } }
انتاج:
Is the stack empty or not? false The stack size is: 5
تكرار العناصر
التكرار يعني جلب عناصر المكدس. يمكننا جلب عناصر المكدس باستخدام ثلاث طرق مختلفة هي كما يلي:
- استخدام مكرر () طريقة
- استخدام لكل () طريقة
- استخدام مكرر القائمة () طريقة
باستخدام طريقة التكرار ().
إنها طريقة واجهة Iterator. يقوم بإرجاع مكرر على العناصر الموجودة في المكدس. قبل استخدام طريقة التكرار () ، قم باستيراد ملفjava.util.Iteratorطَرد.
بناء الجملة
Iterator iterator()
لنقم بإجراء التكرار على المكدس.
StackIterationExample1.java
import java.util.Iterator; import java.util.Stack; public class StackIterationExample1 { public static void main (String[] args) { //creating an object of Stack class Stack stk = new Stack(); //pushing elements into stack stk.push('BMW'); stk.push('Audi'); stk.push('Ferrari'); stk.push('Bugatti'); stk.push('Jaguar'); //iteration over the stack Iterator iterator = stk.iterator(); while(iterator.hasNext()) { Object values = iterator.next(); System.out.println(values); } } }
انتاج:
BMW Audi Ferrari Bugatti Jaguar
باستخدام طريقة forEach ().
توفر Java طريقة forEach() للتكرار على العناصر. الطريقة محددة في متوقعة و تدفق واجهه المستخدم.
جافا سكريبت البرنامج التعليمي
بناء الجملة
default void forEach(Consumeraction)
لنقم بالتكرار على المكدس باستخدام طريقة forEach().
StackIterationExample2.java
import java.util.*; public class StackIterationExample2 { public static void main (String[] args) { //creating an instance of Stack class Stack stk = new Stack(); //pushing elements into stack stk.push(119); stk.push(203); stk.push(988); System.out.println('Iteration over the stack using forEach() Method:'); //invoking forEach() method for iteration over the stack stk.forEach(n -> { System.out.println(n); }); } }
انتاج:
Iteration over the stack using forEach() Method: 119 203 988
باستخدام طريقة listIterator()
تقوم هذه الطريقة بإرجاع مكرر القائمة فوق العناصر الموجودة في القائمة المذكورة (بالتسلسل)، بدءًا من الموضع المحدد في القائمة. إنه يكرر المكدس من الأعلى إلى الأسفل.
بناء الجملة
ListIterator listIterator(int index)
معامل: تقوم الطريقة بتوزيع معلمة مسماة فِهرِس.
عائدات: تقوم هذه الطريقة بإرجاع مكرر القائمة فوق العناصر، بالتسلسل.
استثناء: يرمي IndexOutOfBoundsException إذا كان المؤشر خارج النطاق.
لنقم بالتكرار على المكدس باستخدام طريقة listIterator().
StackIterationExample3.java
import java.util.Iterator; import java.util.ListIterator; import java.util.Stack; public class StackIterationExample3 { public static void main (String[] args) { Stack stk = new Stack(); stk.push(119); stk.push(203); stk.push(988); ListIterator ListIterator = stk.listIterator(stk.size()); System.out.println('Iteration over the Stack from top to bottom:'); while (ListIterator.hasPrevious()) { Integer avg = ListIterator.previous(); System.out.println(avg); } } }
انتاج:
Iteration over the Stack from top to bottom: 988 203 119