PDA

View Full Version : سوال: چگونگی پیاده سازی عمل pop در c++



HRA1374
جمعه 08 آبان 1394, 23:40 عصر
سلام.یه سوال در مورد مبحث پشته داشتم.
این عمل pop در پشته رو چجوری باید پیاده سازی کرد؟اصن این عمل pop واقعا چه کار میکنه؟:ناراحت:
مثلا آیا مقادیر ذخیره شده در یه آرایه به اندازه 10 رو از داخل اون خذف میکنه؟:متفکر:
اگه میشه با کد و پیاده سازی پشته با کلاس خیلی آسون توضیح بدین:گریه:
پیشاپیش تشکر میکنم:لبخند:

hamedBB
شنبه 09 آبان 1394, 07:53 صبح
نمی دونم چرا یه سرچ ساذه اینقد براتون سخته!!!
عمل push و pop روی پشته (Stack) صورت می گیره. همونطور که میدونی پشته ساختار LIFO داره. یعنی آخرین عنصر وارد شونده به پشته اولین عنصر خارج شونده از اون هست. برای مثال میتونی خشاب کلت رو در نظر بگیری که آخرین تیری که در خشاب قرار میدی اولین تیری هست که ازش خارج میشه. حالا به اون عمل گلوله گذاشتن در خشاب push کردن آیتم به پشته می گن و عمل شلیک همون pop کردن آیتم از پشته هست. البته این وسط یک اشاره گر که بهش stack pointer میگن (اسم های دیگه ای هم داره) همیشه به آخرین خونه ی پشته اشاره می کنه. پس باید دقت داشت که با هر عمل push این اشاره گر باید یکی بهش اضافه بشه و با هر عمل pop یکی ازش کم بشه.
این مورد رو هم باید در نظر داشت که برای push کردن باید پر نبودن پشته بررسی بشه و در عمل pop هم خالی نبودن پشته چون وقتی که پره نمیتونی چیزی به پشته اضافه کنی وقتی هم که خالیه نمی تونی چیزی ازش برداری که اگر قصد انجام این کارها رو داشته باشی در زمان اجرا به runtime error برخورد خواهی کرد.
این مثال (پیاده سازی پشته با استفاده از آرایه) رو هم از روی اینترنت با یه سرچ پیدا کردم سعی کن بیشتر سرچ بزنی.


#include < iostream.h >
#include < stdlib.h >
#include < stdio.h >

class IntStack
{
public:
IntStack(int num) { top = 0; maxelem = num; s = new int[maxelem]; }
void push(int t)
{
if (top == maxelem) return;
s[top++] = t;
}
int pop()
{
if (top == 0) return -1;
return s[--top];
}
void display()
{
if (top == 0) { cout << "(empty)\n"; return; }
for (int t=0 ; t < top ; t++) cout << s[t] << " ";
cout << "\n";
}
int empty() { return top == 0; }
private:
int *s;
int top;
int maxelem;
};

void main()
{
IntStack *s = new IntStack(100);
int d;

s->display();
s->push(1);
s->display();
s->push(2);
s->display();
s->push(3);
s->display();
s->push(4);
s->display();
s->pop();
s->display();
s->pop();
s->display();
s->push(10);
s->display();
s->pop();
s->display();
s->pop();
s->display();
s->pop();
s->display();
s->pop();
s->display();
s->pop();
s->display();
}