يمكنك تخيل ال stack كوعاء ضيق مفتوح من الاعلى مغلق من الاسفل . لنفترض ان لديك وعاء به 6 خانات وهذا الوعاء مفتوح من الاعلى مغلق من الاسفل وهذا الوعاء يسمح لك بإدخال عنصر واحد فقط في المرة الواحدة لنفترض ايضآ ان لديك 6 كرات مرقمة وتريد وضعها في هذا الوعاء الواحدة تلو الاخرى
بشكل منتظم فمن الطبيعي ان الكرة رقم 1 سوف يكون موقعها اسفل المكدس في الخانة رقم 6 والكرة رقم 2 سوف يكون موقعها في الخانة رقم 5 والكرة رقم 3 سوف يكون موقعها في الخانة رقم 4 وهكذا وهذه العملية تسمى بعملية push اي الحشر الى الاسفل ....
بعد ان قمت بمليء الوعاء واردت ان تخرج هذه الكرات من الوعاء فلن يسمح لك الوعاء باخراج هذه الكرات دفعة واحدة لماذا لانه ضيق ستضطر لاخراج الكرات واحدة تلو الاخرى كما ادخلتها واحدة تلو الاخرى ومن الطبيعي انك ستبدأ بالافراغ من اعلى اي انك سوف تبدإ باخراج الكرة رقم 6
ثم الكرة رقم 5 ثم الكرة رقم 4 وهكذا وهذه العملية تسمى بعملية pop اي السحب من الاعلى
ستلاحظ بعد هذا كله ان الكرة رقم 1 هي اول من دخلت الى الوعاء واخر من خرجت من الوعاء وتسمى هذه العملية ب First in last out اي اول الداخلين هو اخر الخارجين
ستلاحظ بعد هذا كله ان الكرة رقم 1 هي اول من دخلت الى الوعاء واخر من خرجت من الوعاء وتسمى هذه العملية ب First in last out اي اول الداخلين هو اخر الخارجين
الكود التالي بلغة ++C يوضح كيفية تنفيذ هذه الفكرة
ستجد في هذا الكود مصفوفة تسمى stack وفيها سيتم ادخال القيم ولكن من الاسفل وستجد ايضا دالة ال push ومهمة هذه الدالة هو حشر او ادخال القيم الى المصفوفة stack وستجد ايضا الدالة pop ومهمة هذه الدالة هو سحب القيم من المكدس من الاعلى
ستجد في هذا الكود مصفوفة تسمى stack وفيها سيتم ادخال القيم ولكن من الاسفل وستجد ايضا دالة ال push ومهمة هذه الدالة هو حشر او ادخال القيم الى المصفوفة stack وستجد ايضا الدالة pop ومهمة هذه الدالة هو سحب القيم من المكدس من الاعلى
template<class s> ///templats classclass stack
{
private:
int top;
s item;
s array[5];
public:
stack()
{
top=-1;
}
void getdata()
{
{
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++;
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 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
{
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();
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;
}
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;
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;
{
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
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...