اقوي استضافة مواقع باسعار تبدء من $1.99/بالشهر

ما هو ال stack فى البرمجة

سنتكلم اليوم على نوع من انواع هياكل البيانات المهمة فى البرمجة وسنتعرف على ما هو ال Stack وانه يستخدم لتخزين البيانات والتعامل معاها بطريقة معينة كما سنوضح بالشرح.

ما هو ال stack

الStack مدعوم من اغلب لغات البرمجة وله الكثير من الامثلة فى العالم الحقيقى مثل كتب او ورق فوق بعضه

ما هو ال stack فى البرمجة
ما هو ال stack فى البرمجة

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

ويمكن اجراء عمليتان على  Stack وهما Push و Pop وتعنى Push لادخال عنصر جديد فى ال Stack فوق اعلى عنصر و Pop لاخراج اعلى عنصر من Stack والرسمة القادمة توضح الموضوع اكثر.

خاصية مهمة لل Stack وهى ان اول عنصر وضع فى Stack يخرج اخر عنصر واخر عنصر وضع فى Stack يخرج اول عنصر مما يعنى ان ترتيب دخول العناصر فى Stack عكس ترتيب خروج هذه العناصر.

ولفهم اكبر لفكرة Stack يمكنك تجريب هذا الموقع لفهم كيف يعمل ال Stack ومن ثم المتابعة

تمثيل الStack فى البرمجة

يمكن تمثيل Stack على ان له عمليتان هما:

  1. Push
  2. Pop

وللاستفادة من Stack ومعرفة حالته يمكن استخدام هذه العمليات :

  1. Peak : لمعرفة اخر عنصر فى Stack دون حذفه
  2. IsFull : لمعرفة ما إذا كان Stack ممتلئ
  3. isEmpty : لمعرفة ما إذا كان Stack فارغ

ومؤشر او Pointer يشير إلى اعلى عنصر فى Stack واعلى عنصر كما نعلم هو الذى يجرى عليه العمليات ام يحذف Pop او يضاف فوقه عنصر Push.

كيفية عمل دالة peek

الكود التوضيحى

begin procedure peek

   return stack[top]
   
end procedure

الكود بلغة C

int peek() {
   return stack[top];
}

كيفية عمل دالة isfull

الكود التوضيحى

begin procedure isfull

   if top equals to MAXSIZE
      return true
   else
      return false
   endif
   
end procedure

الكود بلغة C

bool isfull() {
   if(top == MAXSIZE)
      return true;
   else
      return false;
}

كيفية عمل دالة isempty

الكود التوضيحي

begin procedure isempty

   if top less than 1
      return true
   else
      return false
   endif
   
end procedure

الكود بلغة C

لاحظ تنفيذ الكود مختلف قليلًا فى لغة C فنقوم باعطاء قيمية ابتدائية ل top ب 1- ثم بعد ذلك نعرف ان Stack فارغ اذا كان top اقل من صفر (لانه كل عملية Pop نقلل Index بواحد)

bool isempty() {
   if(top == -1)
      return true;
   else
      return false;
}

كيفية عمل دالة pop

عملية Pop او اضافة عنصر جديد إلى Stack هى سلسلة من الخطوات كما يلى :

  1. فحص ما إذا كان ال Stack فارغ او بمعنى اخر استدعاء دالة isEmpty.
  2. إذا كان Stack ملئ اظهار رسالة خطأ والخروج من البرنامج.
  3. اما اذا كان الStack مازال فارغًا , فنقوم بزيادة top ليشير على المكان الفارغ الموجود اعلى اخر عنصر.
  4. نضع العنصر الجديد فى اعلى مكان فى Stack.
  5. الانتهاء والعودة من الدالة.

الكود التوضيحى 

begin procedure push: stack, data

   if stack is full
      return null
   endif
   
   top ← top + 1
   
   stack[top] ← data

end procedure

الكود بلغة C

void push(int data) {
   if(!isFull()) {
      top = top + 1;   
      stack[top] = data;
   } else {
      printf("Could not insert data, Stack is full.\n");
   }
}

كيفية عمل دالة Pop

الوصول إلى اخر عنصر فى Stack او اعلى عنصر لحذفه من Stack عملية تسمى Pop وهى تمر بمجموعة من الخطوات :

  1. فحص ما إذا كان Stack فارغ.
  2. إذا كان Stack فارغ الخروج واظهار رسالة خطأ.
  3. إذا لم يكن ال Stack فارغ نقوم بالوصول إلى اعلى عنصر والذى يشير إليه top.
  4. تقليل top بواحد مما يعنى حذف العنصر الاخير من الStack.
  5. الانتهاء والعودة.

الكود التوضيحى

begin procedure pop: stack

   if stack is empty
      return null
   endif
   
   data ← stack[top]
   
   top ← top - 1
   
   return data

end procedure

كود بلغة C

int pop(int data) {

   if(!isempty()) {
      data = stack[top];
      top = top - 1;   
      return data;
   } else {
      printf("Could not retrieve data, Stack is empty.\n");
   }
}

للحصول على الكود الكامل بلغة C يرجى الضغط هنا

إلى هنا نصل للنهاية و نتمنى الاستفادة للجميع.

اشترك فى القائمة البريدية

عن الكاتب

شارك على وسائل التواصل

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *