ساختار پشته Stack چگونه کار میکند
خلاصه
1404/05/31
پشته (Stack) یک ساختار دادهی خطی است که از اصل **LIFO** (Last In, First Out) یا "آخرین ورودی، اولین خروجی" پیروی میکند. به این معنی که آخرین عنصری که وارد پشته میشود، اولین

پشته (Stack) یک ساختار دادهی خطی است که از اصل **LIFO** (Last In, First Out) یا "آخرین ورودی، اولین خروجی" پیروی میکند. به این معنی که آخرین عنصری که وارد پشته میشود، اولین عنصری است که از آن خارج میشود.
تصور کنید یک دسته بشقاب دارید که روی هم چیده شدهاند. برای برداشتن یک بشقاب، معمولاً از بشقاب بالایی (آخرین بشقابی که روی دسته گذاشتهاید) شروع میکنید. این دقیقاً نحوه کار پشته است.
**عملکرد اصلی پشته:**
* **Push (اضافه کردن):** این عمل یک عنصر را به بالای پشته اضافه میکند. در اصطلاح، "فشار دادن" عنصر به بالای پشته.
* **Pop (حذف کردن):** این عمل عنصر بالای پشته را حذف میکند و آن را برمیگرداند. در اصطلاح، "بیرون کشیدن" عنصر از بالای پشته.
* **Peek/Top (نگاه کردن):** این عمل عنصر بالای پشته را بدون حذف آن، برمیگرداند. به عبارت دیگر، فقط نگاهی به بالاترین عنصر میاندازیم.
* **isEmpty (خالی بودن):** این عمل بررسی میکند که آیا پشته خالی است یا خیر. اگر خالی باشد `true` و در غیر این صورت `false` برمیگرداند.
* **size (اندازه):** این عمل تعداد عناصر موجود در پشته را برمیگرداند.
**تصویرسازی:**
```
// پشته خالی
[]
// Push(10)
[10]
// Push(20)
[10, 20]
// Push(30)
[10, 20, 30] <- Top
// Pop() (برمیگرداند 30)
[10, 20] <- Top
// Peek() (برمیگرداند 20)
[10, 20] <- Top
// Pop() (برمیگرداند 20)
[10] <- Top
// Pop() (برمیگرداند 10)
[] <- Top
// isEmpty() (برمیگرداند true)
```
**نحوه پیادهسازی:**
پشته را میتوان به روشهای مختلفی پیادهسازی کرد:
* **آرایه (Array):** یک آرایه با اندازه ثابت یا پویا برای ذخیره عناصر استفاده میشود. یک متغیر برای ردیابی "بالای" پشته (index آخرین عنصر وارد شده) نگهداری میشود.
* **لیست پیوندی (Linked List):** هر عنصر پشته یک گره در لیست پیوندی است. "بالای" پشته به سر لیست اشاره میکند.
**پیادهسازی با آرایه (مثال پایتون):**
```python
class Stack:
def __init__(self, capacity):
self.capacity = capacity
self.items = [None] * capacity # آرایه با ظرفیت مشخص
self.top = -1 # ایندکس عنصر بالای پشته (مقدار اولیه -1 یعنی پشته خالی است)
def is_empty(self):
return self.top == -1
def is_full(self):
return self.top == self.capacity - 1
def push(self, item):
if self.is_full():
raise Exception("Stack is full")
self.top +=
برخی از محصولات شرکت مهندسی آبان رایان البرز
سایر مقالات آموزشی شرکت نرم افزاری آبان رایان البرز :
- مفهوم ساختار داده در علم کامپیوتر چیست
- Lambda Function در زبانهای مدرن چیست
- نقش برنامهنویسی تابعی در طراحی نرمافزار چیست
- چه تفاوتی بین تابع بازگشتی و تابع معمولی وجود دارد
- چگونه میتوان از الگوی Singleton در برنامهها استفاده کرد
- پلیمورفیسم چیست و چه کاربردی دارد
- مفهوم وراثت در OOP چیست
- کلاس و شی در برنامهنویسی شیءگرا چه مفهومی دارند
- چه تفاوتی بین متغیرهای محلی و سراسری وجود دارد
- مفهوم JSON و کاربرد آن در انتقال داده چیست
- تفاوت بین REST و SOAP در طراحی API چیست
- Nodejs چگونه کار میکند
- تفاوت بین Java و Kotlin در توسعه اپ موبایل چیست
- جاوا اسکریپت چه نقشی در توسعه وب دارد
- زبان Python در چه حوزههایی کاربرد دارد
- تفاوت زبان برنامهنویسی C و C چیست