# 4.4 Yığınlar (Stacks)

C++ dilinde yığın (stack), verileri LIFO (Last In, First Out - Son Giren İlk Çıkar) mantığıyla saklayan bir veri yapısıdır. Yığın yapısı, verilerin son giren elemanın ilk olarak çıkarıldığı bir düzen sağlar. Yığınlar genellikle geçici veri saklama, geri alma işlemleri (undo), fonksiyon çağrıları ve diğer birçok durumda kullanılır.

#### Yığınların Temel Özellikleri

1. **LIFO Yapısı**: Yığınlarda son eklenen eleman, ilk çıkarılan elemandır. Bu yapı, yığınların temel işleyiş prensibidir.
2. **İki Temel İşlem**: Yığınlar genellikle iki temel işlemle çalışır:
   * **Push**: Yığına bir eleman eklemek.
   * **Pop**: Yığından bir eleman çıkarmak.
3. **En Üstteki Elemanı Görme**: Yığındaki en üstteki elemanı görmek için kullanılan bir işlem vardır, bu işleme **Top**denir. Ancak bu işlem yığından herhangi bir elemanı çıkarmaz.

#### Yığınların Kullanımı

C++'ta yığınlar, `#include <stack>` ifadesi ile kullanılmaya başlanır. Aşağıda yığınların temel kullanımını gösteren örnekler bulunmaktadır.

**Yığın Oluşturma ve Eleman Ekleme**

```cpp
#include <iostream>
#include <stack>

int main() {
    // Yığın oluşturma
    std::stack<int> yigin;

    // Eleman ekleme
    yigin.push(10);
    yigin.push(20);
    yigin.push(30);

    // En üstteki elemanı yazdırma
    std::cout << "Yığındaki en üstteki eleman: " << yigin.top() << std::endl;

    return 0;
}
```

**Eleman Çıkarma**

Yığından eleman çıkarmak için `pop()` fonksiyonu kullanılır.

```cpp
#include <iostream>
#include <stack>

int main() {
    // Yığın oluşturma
    std::stack<int> yigin;
    yigin.push(10);
    yigin.push(20);
    yigin.push(30);

    // Yığından eleman çıkarma
    std::cout << "Yığından çıkarılan eleman: " << yigin.top() << std::endl;
    yigin.pop(); // En üstteki elemanı çıkar

    std::cout << "Yeni en üstteki eleman: " << yigin.top() << std::endl;

    return 0;
}
```

**Yığın Boş Mu Kontrolü**

Yığının boş olup olmadığını kontrol etmek için `empty()` fonksiyonu kullanılabilir.

```cpp
#include <iostream>
#include <stack>

int main() {
    // Yığın oluşturma
    std::stack<int> yigin;

    // Yığının boş olup olmadığını kontrol etme
    if (yigin.empty()) {
        std::cout << "Yığın boştur." << std::endl;
    } else {
        std::cout << "Yığın doludur." << std::endl;
    }

    return 0;
}
```

#### Sonuç

C++ yığınları, verileri LIFO düzenine göre saklamanın etkili bir yolunu sunar. Yığınlar, eleman ekleme, çıkarma ve en üstteki elemanı görme gibi basit ama etkili işlemlerle çalışır.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.yavuzlar.org/egitim/c-plus-plus/4.0-veri-yapilari-data-structures/4.4-yiginlar-stacks.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
