پشته ها (Stacks)
پشته در C++ مثل ستون پنکیک است. آخرین پنکیک که می گذاری، اول برداشته می شود. این روش را LIFO می گویند. در پشته فقط به عنصر بالایی دسترسی داری، نه ایندکس ها.
پشته (Stack) چیست؟
پشته یک «ساختار داده (Data Structure)» با ترتیب LIFO است. یعنی «آخر وارد، اول خارج». برای استفاده باید هدرِ <stack> را اضافه کنی.
#include <stack>
ساخت یک پشته
با کلیدواژه stack و نوع داخل <> یک پشته بساز.
std::stack<std::string> cars;
نکته: مقداردهی اولیه پشته با {} ممکن نیست. بعداً با .push() پر کن.
اضافه کردن عناصر
برای افزودن از .push() استفاده کن. عناصر فقط بالای پشته می آیند.
std::stack<std::string> cars;
cars.push("Volvo");
cars.push("BMW");
cars.push("Ford");
cars.push("Mazda");
دسترسی به عنصر بالایی
در پشته فقط عنصر بالایی با .top() قابل دسترسی است.
// فرض کن cars قبلاً push شده است
std::cout << cars.top();
تغییر عنصر بالایی
می توانی مقدار عنصر بالایی را عوض کنی. سپس دوباره بخوان.
cars.top() = "Tesla";
std::cout << cars.top();
حذف عنصر بالایی
برای حذف از .pop() استفاده کن. همیشه بالایی حذف می شود.
std::stack<std::string> cars;
cars.push("Volvo");
cars.push("BMW");
cars.push("Ford");
cars.push("Mazda");
cars.pop();
std::cout << cars.top();
اندازه و خالی بودن پشته
با .size() تعداد عناصر را بگیر. با .empty() خالی بودن را چک کن.
std::cout << cars.size();
std::stack<std::string> s;
std::cout << s.empty();
std::stack<std::string> s2;
s2.push("Volvo");
s2.push("BMW");
s2.push("Ford");
s2.push("Mazda");
std::cout << s2.empty();
تمرین سه مرحله ای
- یک پشته رشته ای بساز.
- چهار مقدار push کن.
- یکی pop کن و top را چاپ کن.
نکته: اگر نیاز به دسترسی ایندکسی داری، از وکتور استفاده کن. اگر افزودن و حذف از ابتدا و انتها می خواهی، لیست بهتر است. برای مرور کلی هم ساختارهای داده و STL را ببین. برای مرجع همین صفحه: پشته در C++.
جمع بندی سریع
- LIFO یعنی آخر وارد، اول خارج.
- فقط به عنصر بالایی دسترسی داری.
- .push اضافه می کند؛ .pop حذف می کند.
- .top خواندن و تغییر بالایی است.
- .size و .empty وضعیت پشته را می گویند.