Yükleniyor...

C++ stack, queue ve priority_queue Kullanımı

C++ std::stack, std::queue ve std::priority_queue kullanımını öğrenin. Temel veri yapıları, öncelikli kuyruklar ve pratik örnekler keşfedin.

C++ Standard Library, stack, queue ve priority_queue ile farklı veri yapılarının davranışlarını kolay şekilde kullanmamızı sağlar. Bu yapılar sırasıyla LIFO (Last-In First-Out), FIFO (First-In First-Out) ve öncelik tabanlı kuyruk mantığıyla çalışır. Bu makalede her bir yapının çalışma prensibi, kullanım alanları ve örnek kodlar yer almaktadır.


1) stack Nedir? (LIFO Yapısı)

std::stack, son giren elemanın ilk çıktığı LIFO (Last-In First-Out) modeline göre çalışır. Bir dizinin veya listenin tam tersine, sadece tepe (top) üzerinden işlem yapılabilir.


#include <stack>
#include <iostream>
using namespace std;

int main() {
    stack<int> st;

    st.push(10);
    st.push(20);
    st.push(30);

    cout << "Top: " << st.top() << endl; // 30

    st.pop(); // 30 çıkar

    cout << "Top: " << st.top() << endl; // 20
}

Kullanım Alanları: geri alma işlemleri, derleyici parantez kontrolü, fonksiyon çağrı yığınları.


2) queue Nedir? (FIFO Yapısı)

std::queue, ilk giren elemanın ilk çıktığı FIFO modeline göre çalışır.


#include <queue>
#include <iostream>
using namespace std;

int main() {
    queue<string> q;

    q.push("Ali");
    q.push("Ayşe");
    q.push("Mehmet");

    cout << "Front: " << q.front() << endl; // Ali
    cout << "Back: " << q.back() << endl;   // Mehmet

    q.pop(); // Ali çıkar

    cout << "Front: " << q.front() << endl; // Ayşe
}

Kullanım Alanları: işlem sıraları, görev yönetimi, mesajlaşma sistemleri.


3) priority_queue Nedir?

std::priority_queue, elemanları büyüklüğe göre otomatik olarak sıralayan bir öncelik kuyruğudur. Varsayılan olarak en büyük eleman en önde bulunur (max-heap).


#include <queue>
#include <iostream>
using namespace std;

int main() {
    priority_queue<int> pq;

    pq.push(50);
    pq.push(10);
    pq.push(80);
    pq.push(20);

    cout << "Top: " << pq.top() << endl; // 80

    pq.pop(); // 80 çıkar

    cout << "Top: " << pq.top() << endl; // 50
}

Kullanım Alanları: en kısa yol algoritmaları (Dijkstra), işlem önceliklendirme, sıralama işlemleri.


4) priority_queue ile Min-Heap Kullanımı

Varsayılan priority_queue bir max-heap oluşturur, ancak min-heap yapmak için greater<> kullanılır.


#include <queue>
#include <vector>
#include <iostream>
using namespace std;

int main() {
    priority_queue<int, vector<int>, greater<int>> minpq;

    minpq.push(40);
    minpq.push(10);
    minpq.push(30);

    cout << "Top: " << minpq.top() << endl; // 10
}

5) Uygulamalı Örnekler

a) stack ile Parantez Dengesi Kontrolü


#include <stack>
#include <string>
#include <iostream>
using namespace std;

bool check(string s) {
    stack<char> st;

    for (char c : s) {
        if (c == '(') st.push(c);
        else if (c == ')') {
            if (st.empty()) return false;
            st.pop();
        }
    }
    return st.empty();
}

int main() {
    cout << check("((a+b)*(c-d))");   // 1
}

b) queue ile Banka Sıra Simülasyonu


#include <queue>
#include <iostream>
using namespace std;

int main() {
    queue<string> customers;

    customers.push("Ali");
    customers.push("Ayşe");
    customers.push("Selim");

    while (!customers.empty()) {
        cout << "Hizmet verilen: " << customers.front() << endl;
        customers.pop();
    }
}

c) priority_queue ile Görev Önceliklendirme


#include <queue>
#include <iostream>
using namespace std;

int main() {
    priority_queue<pair<int,string>> tasks;

    tasks.push({3, "Düşük öncelik"});
    tasks.push({10, "Yüksek öncelik"});
    tasks.push({5, "Orta seviye"});

    while (!tasks.empty()) {
        cout << "Görev: " << tasks.top().second << endl;
        tasks.pop();
    }
}

6) Hangi Yapı Ne Zaman Kullanılır?

Her yapı amacına göre yüksek performans sağlar. Doğru veri yapısını seçmek uygulamaların hızını ve doğruluğunu artırır.


7) TL;DR

  • stack: LIFO, tek uçtan işlem, en son eklenen çıkar.
  • queue: FIFO, sırayla çıkar, ilk eklenen çıkar.
  • priority_queue: öncelik tabanlı; varsayılan max-heap.
  • Min-heap kullanmak için: greater<> tipi verilir.
  • Tüm örnekler Visual Studio 2022 ve GCC ile uyumludur.

İlişkili Makaleler