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

السلام عليكم

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

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

بعد أن أنهينا كلامنا عن الحلقات المتسلسلة بنوعيها
سنحاول الآن الإنتقال إلى التراكيب التي تبنى عليها
هناك نوعين أساسيين:
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
سأحاول أن أتناول بعضاً من هذه التطبيقات بإذن الله
بما أن النعس بدأ يغزو جفوني
نأجل الحديث إلى تدوينة أخرى

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

Tags: , , , , ,

26 Responses to “تراكيب البيانات: المكدس”

  1. LuLu قال:

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

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

    import SinglyLinkedListV2.SinglyLinkedList;
    

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

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

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

  2. admin قال:

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

    تحياتي

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

  4. admin قال:

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

    تحياتي

  5. shado قال:

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

    شكرا علاء

  6. admin قال:

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

    تحياتي

  7. funny lady قال:

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

  8. admin قال:

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

    تحياتي

  9. أخضر قال:

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

  10. admin قال:

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

    تحياتي

  11. هديل علي قال:

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

  12. admin قال:

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

    تحياتي

  13. محمد قال:

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

  14. admin قال:

    مدونة أخي :)

  15. وسام قال:

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

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

  16. سوسو قال:

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

  17. admin قال:

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

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

    تحياتي

  18. Juegos قال:

    Very good weblog, I am lucky that I discovered it

  19. admin قال:

    any notes or ideas ?

    BW,
    Alaa

  20. samar قال:

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

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

  21. admin قال:

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

    تحياتي

  22. Nadia khoury قال:

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

  23. admin قال:

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

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

    تحياتي

Leave a Reply