ساختار پشته Stack چگونه کار می‌کند

خلاصه
1404/05/31

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

ساختار پشته Stack چگونه کار می‌کند

پشته (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 +=