سنتكلم اليوم على نوع من انواع هياكل البيانات المهمة فى البرمجة وسنتعرف على ما هو ال Stack وانه يستخدم لتخزين البيانات والتعامل معاها بطريقة معينة كما سنوضح بالشرح.
محتوي المقال
ما هو ال stack
الStack مدعوم من اغلب لغات البرمجة وله الكثير من الامثلة فى العالم الحقيقى مثل كتب او ورق فوق بعضه
مما يعنى ان العنصر فى الاعلى (الذى دخل اخيرًا) يمكن الحصول عليه المرة القادمة Last In First Out او اختصارًا LIFO وتعنى اخر عنصر وضع فى الاستاك يمكن الحصول عليه اوصل عنصر. ويمكننا ملاحظة انه يمكننا الوصول إلى العنصر الاول من جهة واحدة فقط من الاعلى.
ويمكن اجراء عمليتان على Stack وهما Push و Pop وتعنى Push لادخال عنصر جديد فى ال Stack فوق اعلى عنصر و Pop لاخراج اعلى عنصر من Stack والرسمة القادمة توضح الموضوع اكثر.
خاصية مهمة لل Stack وهى ان اول عنصر وضع فى Stack يخرج اخر عنصر واخر عنصر وضع فى Stack يخرج اول عنصر مما يعنى ان ترتيب دخول العناصر فى Stack عكس ترتيب خروج هذه العناصر.
ولفهم اكبر لفكرة Stack يمكنك تجريب هذا الموقع لفهم كيف يعمل ال Stack ومن ثم المتابعة
تمثيل الStack فى البرمجة
يمكن تمثيل Stack على ان له عمليتان هما:
- Push
- Pop
وللاستفادة من Stack ومعرفة حالته يمكن استخدام هذه العمليات :
- Peak : لمعرفة اخر عنصر فى Stack دون حذفه
- IsFull : لمعرفة ما إذا كان Stack ممتلئ
- 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 هى سلسلة من الخطوات كما يلى :
- فحص ما إذا كان ال Stack فارغ او بمعنى اخر استدعاء دالة isEmpty.
- إذا كان Stack ملئ اظهار رسالة خطأ والخروج من البرنامج.
- اما اذا كان الStack مازال فارغًا , فنقوم بزيادة top ليشير على المكان الفارغ الموجود اعلى اخر عنصر.
- نضع العنصر الجديد فى اعلى مكان فى Stack.
- الانتهاء والعودة من الدالة.
الكود التوضيحى
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 وهى تمر بمجموعة من الخطوات :
- فحص ما إذا كان Stack فارغ.
- إذا كان Stack فارغ الخروج واظهار رسالة خطأ.
- إذا لم يكن ال Stack فارغ نقوم بالوصول إلى اعلى عنصر والذى يشير إليه top.
- تقليل top بواحد مما يعنى حذف العنصر الاخير من الStack.
- الانتهاء والعودة.
الكود التوضيحى
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 يرجى الضغط هنا
إلى هنا نصل للنهاية و نتمنى الاستفادة للجميع.