تراكيب البيانات: المكدس

السلام عليكم

كيف حالكم جميعاً
بصراحة اشتقت لكم كثيراً
لا أعلم كيف يمكنني التعبير عن ذلك
أحياناً كثيرة أفكر في حالي لو لم تكن هذه المدونة
لا أدري ما كنت سأفعل في وقت فراغي

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

بعد أن أنهينا كلامنا عن الحلقات المتسلسلة بنوعيها
سنحاول الآن الإنتقال إلى التراكيب التي تبنى عليها
هناك نوعين أساسيين:
1- مكدس Stack
2- طابور Queue
بالطبع هناك آخرين سنأجل الحديث عنهم
أو ربما نتجاهلهم :)
بما أن معظمكم أذكياء بما فيه كفاية إلا بعض البوابين
(كل يعرف نفسه)
فأنتم تعلمون عن من سنتحدث اليوم

هو عبارة عن وعاء تتجمع فيه البيانات
أبسط مثال عليه مكدس الصحون
والذي يتم تمثيله بالشكل التالي
قمة الوعاء –> الصحن الأول –> الصحن الثاني –> … –> الصحن الأخير –> قاع الوعاء

لكي أسهل عليكم الموضوع
هذه صورة توضيحية

بصراحة الصورة وجدتها على محرك جوجل
ولا أعلم مصدرها الأصلي
يبدو أني أضعتها :)
الآن تريد أن تحصل على صحن
لن تستطيع أن تحصل إلى على الصحن الأخير لأنه في القمة
ماذا لو أردت الصحن الأول
ستضطر إلى استخراج كل الصحون حتى تصل إليه
بمعنى آخر آخر صحن دخل المكدس أول صحن يخرج منه
وهذا ما اصطلح على تسميته LIFO
وهي اختصار للجملة
Last In First Out
من يدخل أخيراً يخرج أولاً

(شكراً للأخ شادي على تنبيهي إلى الخطأ)

تعالو نبني مكدس باستخدام الحلقات المتسلسلة أحادية الاتجاه
ماهي العمليات التي نحتاجها؟
1- الإضافة إلى النهاية
2- الحذف من النهاية
جيد سنقوم بعمل كائن من الفئة SinglyLinkedList
ونستخدم الدوال السابقة
بالمناسبة الدوال الخاصة بالمكدس تسمى بالطريقة التالية
ادفع push واسحب pop
وهي تمثل المعنى الفعلي لعملية الإضافة والحذف
سنقوم الآن ببناء الفئة StackList
أنا قمت ببناء واحدة

import SinglyLinkedListV2.SinglyLinkedList;
public class StackList { SinglyLinkedList list;

public boolean isEmpty() {

return list.isEmpty();

}

public Object pop() {

return list.deleteLast();

}

public void push(Object obj) {

list.addLast(obj);

}

public Object top() {

return list.getFirst();

}

}

لقد قمنا ببناء المكدس الخاص بنا
وهذا عمل جيد
لكنه ليس بالجودة اللازمة
سأتكلم عن طريقة أفضل في المرة القادمة

بعض التطبيقات علي المكدس

1- إلى الأمام وإلى الخلف في المتصفحات
2- التراجع والاستعادة في محررات النصوص
3- التحويل بين أنواع التعبيرات المختلفة postfix prefix
سأحاول أن أتناول بعضاً من هذه التطبيقات بإذن الله
بما أن النعس بدأ يغزو جفوني
نأجل الحديث إلى تدوينة أخرى

تحياتي
شهيد الأقصى

Share

التعليقات 26 على “تراكيب البيانات: المكدس”

  1. LuLu Says:

    السلام عليكم
    يعطيك العافية اخي علاء…
    شرح رائع ماشاء الله …بس ان شا الله ما اكون من البوابين :(
    بس عندي شوية اسئلة اذا ممكن..

    هلئيت ليش هيك عملت

    import SinglyLinkedListV2.SinglyLinkedList;
    

    يعني مثلا انتا عامل كلاس تاني ؟؟غير اللي كاتبه
    اول مرة اشوف حاجة زي كدا …يعني انتا عامل امبورت لشو؟

    شغلة تانية ليش استخدمت دوال جاهزة؟؟؟

    بالنسبة انو نتحفك بآرائنا :) ان شا الله عن قريب حتلاقينا دايما هنا
    ورأينا معروف :)
    صل على خير الانام

  2. admin Says:

    الله يعافيكي لولو
    بالنسبة لموضوع البوابين
    هناك واحد معين أريده :)
    بالطبع هذا عبارة عن ملف jar
    أو ملف java في نفس المشروع
    ليش أبني دوال جديدة
    وأنا فعلياً بينتها في الحلقات المتسلسلة
    ما السبب الذي يمنعني من استخدمها؟؟
    بالنسبة لموضوع الآراء
    أقصد هل هناك من نقاط غير مفهومة
    هل ترين أن أقوم بعمل معين سيساعدك على الفهم
    بالطبع ما عدا أن أكتب بغير العربية
    فكل الاقتراحات مقبولة

    تحياتي

  3. أبو مروان Says:

    عفوا اخي علاء أنا لا أفهم كثيرا فيما تكتب ولكن حبيت أسلم عليك

  4. admin Says:

    لا عليك أخي أبو مروان
    تشريفك لي يكفي

    تحياتي

  5. shado Says:

    جااء بوقته ..مع انو متابع المدونة الرائعة …بس ..يبدو اني لست بحار جيد في المواقع
    لاني كسوول

    شكرا علاء

  6. admin Says:

    مرحبا شادو
    بتمنى أكون دايماً عند حسن ظنكم

    تحياتي

  7. funny lady Says:

    مرحبا
    كان والله نفسي اقراها من الاول لانه كنا محتاجينهم بس المتصفح ماكان يفتح عندي بالمره وتوي زبطه :) :)
    الشرح حلو الحمدلله فاهماه ماعندنا مشاكل بالستاك هنا …يمكن واجهنا مشاكل في حكايه استخدام الستاك للتحويل من infix to postfix
    بس الحمدلله عدت علي خير :)
    بس خلينا اسمها ستاك اما المكدس هادي بتخوف شويه

  8. admin Says:

    والله المتصفح بده حرق
    الحمد لله أنها عدت
    هاتي اسم عربي يكون أمور :)
    وأنا أعتمده

    تحياتي

  9. أخضر Says:

    الله يجزاك خير بس هل ألقى شرح المصفوفات بالتفصيل لأني ندمان أني ما فهمتهم من البدااااية

  10. admin Says:

    سأحاول لو وجدت فرصة
    لكني لا أعلم متى تأتي هذه الفرصة
    على أية حال اطلع على المقالات التالية ستفيدك بإذن الله
    http://www.arabteam2000-forum.com/index.php?act=ST&f=43&t=49293
    http://www.arabteam2000-forum.com/index.php?showtopic=176955

    تحياتي

  11. jeo Says:

    yes

  12. admin Says:

    no :)

    regards

  13. هديل علي Says:

    السلام عليكم
    موضوع كثير حلو وانا شخصياً استفدة منه بس عندي سؤال هو (كيف يتم كتابة كود prefix (-+a*bce)?)
    وشكرا على جهودكم

  14. admin Says:

    بأمانة لا أذكر شيئاً عن prefix و postfix

    تحياتي

  15. محمد Says:

    المنتدى ما شاء الله

  16. admin Says:

    مدونة أخي :)

  17. وسام Says:

    اخى الحبيب سلام الله عليكم

    ارجو مساعدتك على اميلى الخاص
    للضرورة
    والله مزنوق
    انا وسام من غزة
    wesam__1003@hotmail.com

  18. admin Says:

    بإمكانك مراسلتي على إيميلي
    http://modonat-alaa.freehostia.com/%D8%B3%D9%8A%D8%B1%D8%A9-%D8%B0%D8%A7%D8%AA%D9%8A%D8%A9/

    تحياتي

  19. سوسو Says:

    عن جد بتشكرك ياكابتن على هذا المعروف
    بصراحة طلع مخى والحمدلله بديت اتابع معك لانه اول مرة بصراحة محرك البحث يوصلنى لعندك
    فمشكور كتير
    والله يوفقك للخير دايما وانا مبسوطة بشرحك فياريت تستمر

  20. admin Says:

    الحمد لله أنه وصلك :)

    أمين يا رب
    بإذن الله في أقرب وقت سأكمل

    تحياتي

  21. Juegos Says:

    Very good weblog, I am lucky that I discovered it

  22. admin Says:

    any notes or ideas ?

    BW,
    Alaa

  23. samar Says:

    اللله يعطيك العافية بس بدي كود الكلاس لكل دالة من الدوال بلغة الجافا يعني بدي العمليات على المكدس متل الاضافة والحذف على شكل صف بلغة الجافا و

    ولك جزيل الشكر

  24. admin Says:

    راجعي الدروس الأخرى
    والتي تتكلم عن السلاسل أحادية وثنائية الاتجاه LinkedLkist و DoublyLinkedList

    تحياتي

  25. Nadia khoury Says:

    مرحبا عندي سؤال متى وليش بنستخدم المكدس!! ،،كل ما يطلع مي سؤال بسألك ؛)

  26. admin Says:

    متى نستخدمها سؤال مطاط نوعاً ما؟
    لكن يمكن القول بأن أي عمليات يكون فيها تكديس أو من يدخل أخيراً يخرج أولاً فإنها تصلح للمكدس
    مثال زر التراجع في محرر النصوص يعتمد على المكدس حيث أن آخر تعديل قمت به هو أول تعديل تريد التراجع عنه
    مثال آخر في تأريخ المتصفحات history ستجد أن المواقع التي زرتها مأخراً تظهر أولاً في العرض
    وستجدي أن المكدس يعتمد في كل شيء فيه تأريخ تراجع وهكذا

    وبالنسبة للأسئلة مرحباً بك كل وقت

    تحياتي

أكتب تعليقاً