التعامل مع فئة المكدس أو الكومة Stack in java
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: أساسيات اللغة Java Basics
صفحة 1 من اصل 1 • شاطر
التعامل مع فئة المكدس أو الكومة Stack in java
اهلا بكم اخوانى الكرام
مفهوم المكدس أو الكومة Stack
في الحوسبة ، المكدس هو بنية بيانات تستخدم لتخزين مجموعة من الكائنات. لذلك وفرت لغة الجافا الفئة #util_Stack لانشاء هذه البنية بواسطة فقط المُنشئ الافتراضي ، الذي ينشئ مكدسًا فارغًا.
تتضمن فئة #Stack جميع الأساليب المحددة بواسطة Vector ، ويضيف العديد من الطرق الخاصة به ...ويتم إضافة العناصر وتخزينها في الكومة باستخدام الاسلوب #push . كما يمكن استرجاع الكائنات باستخدام الاسلوب #pop ، فيؤدي ذلك إلى إزالة العنصر من المكدس.
وتطبق فئة Stack طريقة (LIFO) لارجاع العناصر وهى اختصار للجملة الانجليزية #Last-in-first-out بحيث عندما تقوم بسحب عنصر من المكدس ، فإنه يأتي من الأعلى. بمعنى آخر ، العنصر الأخير الذي أضفته إلى المكدس هو أول عنصر الذى يعود عند استخدام الاسلوب pop
وحتى نفهم بشكل اوضع دعونى اكتب لك المثال التالي :
الاخراج :
فى المثال اعلاه ستجد أن أخر عنصر تم ادخالة للمكدس st هو القيمة 4 و بالتالى عند سحب عنصر واحد من مكدسنا هذا كانت القيمة 4 هى القيمة التى تم سحبها
إستخدام الطريقة peek() Stack
تستخدم الطريقة #peek() لإرجاع كائنًا من أعلى المكدس كما فى المثال التالى :
Output
Stack: [Dog, Horse, Cat]
Element at top: Cat
ابحث عن العناصر فى المكدس أو الكومة
للبحث عن عنصر في المكدس ، نستخدم طريقة search (). تقوم بإرجاع موضع العنصر من أعلى المكدس. فمثلا،
Output
Stack: [Dog, Horse, Cat]
Position of Horse: 2
وللتحقق مما إذا كانت المكدس فارغة أم لا ، نستخدم الطريقة #empty() ...مثال :
Output
Stack: [Dog, Horse, Cat]
Is the stack empty? false
ترتيب العناصر فى المكدس أو الكومة
لكى تستطيع ترتيب عناصر الكومة أو المكدس ترتيبا تصاعديا علينا انشاء كومة أخرى دعونا نسميها مكدس مؤقت temporary stack في حين تعطى المكدس الاصلي اسم mainStack لانشاء طريقة لترتيب عناصر الكومة ترتبيا تصاعديا على النحو التالى :
و المثال بالكامل على النحو التالى :
الاخراج :
مفهوم المكدس أو الكومة Stack
في الحوسبة ، المكدس هو بنية بيانات تستخدم لتخزين مجموعة من الكائنات. لذلك وفرت لغة الجافا الفئة #util_Stack لانشاء هذه البنية بواسطة فقط المُنشئ الافتراضي ، الذي ينشئ مكدسًا فارغًا.
تتضمن فئة #Stack جميع الأساليب المحددة بواسطة Vector ، ويضيف العديد من الطرق الخاصة به ...ويتم إضافة العناصر وتخزينها في الكومة باستخدام الاسلوب #push . كما يمكن استرجاع الكائنات باستخدام الاسلوب #pop ، فيؤدي ذلك إلى إزالة العنصر من المكدس.
وتطبق فئة Stack طريقة (LIFO) لارجاع العناصر وهى اختصار للجملة الانجليزية #Last-in-first-out بحيث عندما تقوم بسحب عنصر من المكدس ، فإنه يأتي من الأعلى. بمعنى آخر ، العنصر الأخير الذي أضفته إلى المكدس هو أول عنصر الذى يعود عند استخدام الاسلوب pop
وحتى نفهم بشكل اوضع دعونى اكتب لك المثال التالي :
- الكود:
import java.util.Stack;
public class Test1 {
public static void main(String[] args) {
// إنشاء كومة أو مكدس
Stack st = new Stack();
// إضافة بياتات الى الكومة
st.push(2);
st.push(1);
st.push(5);
st.push(3);
st.push(4);
// طباعة الكومة
System.out.println("stack befor pop: " + st);
// ارجاع بيانات المكدس بطريقة الداخل اخير خارج اولا
st.pop();
System.out.println("stack After pop: " + st);
}
}
الاخراج :
- الكود:
stack befor pop: [2, 1, 5, 3, 4]
stack After pop: [2, 1, 5, 3]
فى المثال اعلاه ستجد أن أخر عنصر تم ادخالة للمكدس st هو القيمة 4 و بالتالى عند سحب عنصر واحد من مكدسنا هذا كانت القيمة 4 هى القيمة التى تم سحبها
إستخدام الطريقة peek() Stack
تستخدم الطريقة #peek() لإرجاع كائنًا من أعلى المكدس كما فى المثال التالى :
- الكود:
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals= new Stack<>();
// Add elements to Stack
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
// Access element from the top
String element = animals.peek();
System.out.println("Element at top: " + element);
}
}
Output
Stack: [Dog, Horse, Cat]
Element at top: Cat
ابحث عن العناصر فى المكدس أو الكومة
للبحث عن عنصر في المكدس ، نستخدم طريقة search (). تقوم بإرجاع موضع العنصر من أعلى المكدس. فمثلا،
- الكود:
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals= new Stack<>();
// Add elements to Stack
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
// Search an element
int position = animals.search("Horse");
System.out.println("Position of Horse: " + position);
}
}
Output
Stack: [Dog, Horse, Cat]
Position of Horse: 2
وللتحقق مما إذا كانت المكدس فارغة أم لا ، نستخدم الطريقة #empty() ...مثال :
- الكود:
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals= new Stack<>();
// Add elements to Stack
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
// Check if stack is empty
boolean result = animals.empty();
System.out.println("Is the stack empty? " + result);
}
}
Output
Stack: [Dog, Horse, Cat]
Is the stack empty? false
ترتيب العناصر فى المكدس أو الكومة
لكى تستطيع ترتيب عناصر الكومة أو المكدس ترتيبا تصاعديا علينا انشاء كومة أخرى دعونا نسميها مكدس مؤقت temporary stack في حين تعطى المكدس الاصلي اسم mainStack لانشاء طريقة لترتيب عناصر الكومة ترتبيا تصاعديا على النحو التالى :
- الكود:
public Stack <Integer> Sorting(Stack<Integer> mainStack) {
//إنشاء الكومة التانية باسم مؤقت
Stack <Integer> temporary = new Stack();
// حلقة تكرارية تنتهى عندم يكون المكدس فارغ
while (!mainStack.isEmpty()) {
// سحب العنصر الاول فى المكدس طوال حلقة التكرار
int X = mainStack.pop();
// كرر طالما المكدس المؤقت غير فارغ وأعلى المكدس المؤقت أكبر من أكس
while (! temporary.isEmpty() && temporary.peek() > X) {
// اسحب العناصر من المكدس المؤقت واضفه إلى المكدس الأصلي
mainStack.push( temporary.pop());
}
temporary.push(X);
}
return temporary;
}
}
و المثال بالكامل على النحو التالى :
- الكود:
import java.util.Stack;
public class StackSorting {
public static void main(String[] args) {
// إنشاء كومة أو مكدس الاصلى او الرئيسى
Stack <Integer> st = new Stack();
// إضافة بياتات الى الكومةالرئسية
st.push(2);
st.push(1);
st.push(5);
st.push(3);
st.push(4);
// طباعة الكومة
System.out.println("stack befor pop: " + st);
// ارجاع بيانات المكدس بطريقة الداخل اخير خارج اولا
st.pop();
System.out.println("stack After pop: " + st);
StackSorting s = new StackSorting();
// استخدام الطريقة لتريبت عناصر المكدس
Stack<Integer> sortedStack = s.Sorting(st);
// طباعة المكدس بعد الترتيب
System.out.println("Sorted Stack After pop is : " + sortedStack);
}
public Stack <Integer> Sorting(Stack<Integer> mainStack) {
//إنشاء الكومة التانية باسم مؤقت
Stack <Integer> temporary = new Stack();
// حلقة تكرارية تنتهى عندم يكون المكدس فارغ
while (!mainStack.isEmpty()) {
// سحب العنصر الاول فى المكدس طوال حلقة التكرار
int X = mainStack.pop();
// كرر طالما المكدس المؤقت غير فارغ وأعلى المكدس المؤقت أكبر من أكس
while (! temporary.isEmpty() && temporary.peek() > X) {
// اسحب العناصر من المكدس المؤقت واضفه إلى المكدس الأصلي
mainStack.push( temporary.pop());
}
temporary.push(X);
}
return temporary;
}
}
الاخراج :
stack befor pop: [2, 1, 5, 3, 4]
stack After pop: [2, 1, 5, 3]
Sorted Stack After pop is : [1, 2, 3, 5]
stack After pop: [2, 1, 5, 3]
Sorted Stack After pop is : [1, 2, 3, 5]
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
| |
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: أساسيات اللغة Java Basics
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى
أمس في 1:38 pm من طرف moslema_r
» تصميم تطبيق جوال لمغسلة ملابس
الخميس سبتمبر 05, 2024 7:22 am من طرف mona mohamed
» تصميم تطبيق جوال لشركة عقارات
الأربعاء سبتمبر 04, 2024 11:34 am من طرف mona mohamed
» شركة مكافحة النمل الابيض بالرياض
الثلاثاء سبتمبر 03, 2024 7:04 pm من طرف moslema_r
» تصميم تطبيق جوال لنقل الاثاث
الإثنين سبتمبر 02, 2024 12:08 pm من طرف mona mohamed
» هناجر
السبت أغسطس 31, 2024 7:25 pm من طرف moslema_r
» تصميم تطبيق جوال لمتجر ورد
الخميس أغسطس 29, 2024 7:16 am من طرف mona mohamed
» تصميم تطبيق جوال لسلسلة مطاعم
الثلاثاء أغسطس 27, 2024 7:42 am من طرف mona mohamed
» تصميم تطبيق جوال لتوصيل الطلبات
الأحد أغسطس 25, 2024 7:38 am من طرف mona mohamed
» مظلات سيارات متحركة
الخميس أغسطس 22, 2024 8:30 pm من طرف moslema_r