منتدى مصر التقني
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

التعامل مع فئة المكدس أو الكومة Stack in java

اذهب الى الأسفل

التعامل مع فئة المكدس أو الكومة  Stack in java Empty التعامل مع فئة المكدس أو الكومة Stack in java

مُساهمة من طرف أحمد مناع الإثنين يناير 06, 2020 6:20 pm

اهلا بكم اخوانى الكرام

مفهوم المكدس أو الكومة Stack

في الحوسبة ، المكدس هو بنية بيانات تستخدم لتخزين مجموعة من الكائنات. لذلك وفرت لغة الجافا الفئة #util_Stack لانشاء هذه البنية بواسطة فقط المُنشئ الافتراضي ، الذي ينشئ مكدسًا فارغًا.
تتضمن فئة #Stack جميع الأساليب المحددة بواسطة Vector ، ويضيف العديد من الطرق الخاصة به ...ويتم إضافة العناصر وتخزينها في الكومة باستخدام الاسلوب #push . كما يمكن استرجاع الكائنات باستخدام الاسلوب #pop ، فيؤدي ذلك إلى إزالة العنصر من المكدس.

وتطبق فئة Stack طريقة (LIFO) لارجاع العناصر وهى اختصار للجملة الانجليزية  #Last-in-first-out بحيث عندما تقوم بسحب عنصر من المكدس ، فإنه يأتي من الأعلى. بمعنى آخر ، العنصر الأخير الذي أضفته إلى المكدس هو أول عنصر الذى  يعود عند استخدام الاسلوب pop

التعامل مع فئة المكدس أو الكومة  Stack in java 243082313


وحتى نفهم بشكل اوضع دعونى اكتب لك المثال التالي :

الكود:

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]

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى