عُمر ⚡️
عُمر ⚡️

@power_attar

16 Tweets 3 reads May 30, 2021
هياكل البيانات Data Structure
المكدس Stack
ثريد ال stack او المكدس ⚡️
👇👇👇
@PrograminLovers
يمكنك تخيل ال stack كوعاء ضيق مفتوح من الاعلى مغلق من الاسفل . لنفترض ان لديك وعاء به 6 خانات وهذا الوعاء مفتوح من الاعلى مغلق من الاسفل وهذا الوعاء يسمح لك بإدخال عنصر واحد فقط في المرة الواحدة لنفترض ايضآ ان لديك 6 كرات مرقمة وتريد وضعها في هذا الوعاء الواحدة تلو الاخرى
بشكل منتظم فمن الطبيعي ان الكرة رقم 1 سوف يكون موقعها اسفل المكدس في الخانة رقم 6 والكرة رقم 2 سوف يكون موقعها في الخانة رقم 5 والكرة رقم 3 سوف يكون موقعها في الخانة رقم 4 وهكذا وهذه العملية تسمى بعملية push اي الحشر الى الاسفل ....
بعد ان قمت بمليء الوعاء واردت ان تخرج هذه الكرات من الوعاء فلن يسمح لك الوعاء باخراج هذه الكرات دفعة واحدة لماذا لانه ضيق ستضطر لاخراج الكرات واحدة تلو الاخرى كما ادخلتها واحدة تلو الاخرى ومن الطبيعي انك ستبدأ بالافراغ من اعلى اي انك سوف تبدإ باخراج الكرة رقم 6
ثم الكرة رقم 5 ثم الكرة رقم 4 وهكذا وهذه العملية تسمى بعملية pop اي السحب من الاعلى
ستلاحظ بعد هذا كله ان الكرة رقم 1 هي اول من دخلت الى الوعاء واخر من خرجت من الوعاء وتسمى هذه العملية ب First in last out اي اول الداخلين هو اخر الخارجين
الكود التالي بلغة ++C يوضح كيفية تنفيذ هذه الفكرة
ستجد في هذا الكود مصفوفة تسمى stack وفيها سيتم ادخال القيم ولكن من الاسفل وستجد ايضا دالة ال push ومهمة هذه الدالة هو حشر او ادخال القيم الى المصفوفة stack وستجد ايضا الدالة pop ومهمة هذه الدالة هو سحب القيم من المكدس من الاعلى
وطباعة القيم
ستكون مخرجات هذا الكود ان القيم سيتم طباعتها بشكل معكوس لماذا لاننا في هذا الكود قمنا بتطبيق نظرية First in Last out اي ان القيم التي دخلت في البداية سوف يتم اخراجها وطباعتها اخرا
stack using templates
#include<iostream.h>
#include<iomanip.h>
template<class s> ///templats classclass stack
{
private:
int top;
s item;
s array[5];
public:
stack()
{
top=-1;
}
void getdata()
{
cout<<"enter item to push in stack"<<endl;
cin>>item;
}
void push()
{
if(top==5)
cout<<"overflow"<<endl;
else
{
top++;
array[top]=item;
}
}
void pop()
{
if(top==-1)
cout<<"underflow"<<endl;
else
{
array[top]=NULL;
top--;
}
}
void disp()
{
for(int i=0;i<=top;i++)
{
cout<<array[i]<<'\t';
}
cout<<endl;
}
};
int main()
{
stack<int>stacki;
stack<char>stackc;
int r;
char ch;
do
{
cout<<"integer array"<<endl;
cout<<"press 1 to push element in stack & 2 to pop it"<<endl;
cout<<" 3 to display stack"<<endl;
cin>>r;
switch (r)
{
case 1:
stacki.getdata();
stacki.push();
break;
case 2:
stacki.pop();
break;
case 3:
stacki.disp();
break;
default:
cout<<"bad input"<<endl;
break;
}
cout<<"do you want to process more y/n"<<endl;
cin>>ch;
}
while(ch!='n');
do
{
cout<<"character array"<<endl;
cout<<"press 1 to push element in stack & 2 to pop it"<<endl;
cout<<" 3 to display stack"<<endl;
cin>>r;
switch (r)
{
case 1:
stackc.getdata();
stackc.push();
break;
case 2:
stackc.pop();
break;
case 3:
stackc.disp();
break;
default:
cout<<"bad input"<<endl;
break;
}
cout<<"do you want to process more y/n"<<endl;
cin>>ch;
}
while(ch!='n');
return 0;
}
اتمنى لكم الاستفادة. 😍
@rattibha

Loading suggestions...