8 - Kuyruk İşlemleri ve Örnekleri
2025
struct test
, head
, tail
)enqueue
(sonaEkle
) İşlemi Örneği// Düğüm yapısı
struct Node {
int veri;
struct Node *sonraki;
};
struct Node *head = NULL; // Kuyruğun başı (çıkarılacak eleman)
struct Node *tail = NULL; // Kuyruğun sonu (eklenen eleman)
void enqueue(int sayi) {
struct Node *yeniDugum = (struct Node *)malloc(sizeof(struct Node));
if (yeniDugum == NULL) {
printf("Hata: Bellek ayrılamadı!\n");
return; // Bellek hatası durumunda fonksiyondan çık
}
yeniDugum->veri = sayi;
yeniDugum->sonraki = NULL;
if (tail == NULL) { // Kuyruk boşsa
head = yeniDugum;
tail = yeniDugum;
} else { // Kuyrukta eleman varsa
tail->sonraki = yeniDugum;
tail = yeniDugum; // Tail'i güncelle
}
printf("%d kuyruğa eklendi.\n", sayi);
}
head
) bir eleman çıkarır.INT_MIN
) veya hata mesajı verir.INT_MIN
, limits.h
kütüphanesinden gelir ve genellikle hata kodu olarak kullanılır.int dequeue() {
// 1. Kuyruk boş mu kontrol et
if (head == NULL) {
printf("Hata: Kuyruk boş!\n");
// Boş kuyruktan eleman çıkarılamaz. Hata kodu olarak INT_MIN (limits.h) döndürebiliriz.
return INT_MIN;
}
// 2. Geçici bir işaretçi ile head'i tut
struct Node *temp = head;
// 3. Çıkarılacak veriyi sakla
int cikarilanVeri = temp->veri;
// 4. Head'i bir sonraki elemana kaydır
head = head->sonraki;
// 5. Eğer head NULL olduysa (son eleman çıkarıldıysa), tail'i de NULL yap
if (head == NULL) {
tail = NULL;
}
// 6. Eski head düğümünün belleğini serbest bırak
free(temp);
// 7. Çıkarılan veriyi döndür
printf("%d kuyruktan çıkarıldı.\n", cikarilanVeri);
return cikarilanVeri;
}
head
) elemanın verisini, elemanı çıkarmadan döndürür.INT_MIN
) veya hata mesajı verir.malloc
başarısız olduğunda eleman eklenemez.isFull
fonksiyonu ya her zaman 0 (dolu değil) döndürür ya da implemente edilmez.main
fonksiyonu)int main() {
// Kuyruğun başlangıç durumu
printf("Başlangıçta kuyruk boş mu? %s\n", isEmpty() ? "Evet" : "Hayır");
// Eleman ekleyelim
enqueue(10);
enqueue(20);
enqueue(30);
printf("Kuyruk boş mu? %s\n", isEmpty() ? "Evet" : "Hayır");
// Öndeki elemana bakalım
peek();
// Eleman çıkaralım
dequeue();
peek();
dequeue();
enqueue(40); // Kuyruk: 30, 40
peek();
dequeue();
dequeue();
https://gist.github.com/ecylmz/dd3b7086fc80582ccce7b09034275574
Kuyruk işlemlerinin adımlarını daha iyi anlamak için: https://lumos.emrecan.dev/queue
dequeue
fonksiyonu boş kuyruk durumunda INT_MIN
döndürmek yerine void
olsa ve sadece hata mesajı bassa nasıl olurdu? Avantaj/Dezavantajları nelerdir?