0Pricing
Java Academy · Ders

Deque İşlemleri: Yığın ve Kuyruk

Yığın (push/pop) ve kuyruk (offer/poll) davranışlarını uygulamak için LinkedList'i Deque olarak kullanın.

Deque İşlemleri: Yığın ve Kuyruk, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

Çift Uçlu Kuyruk: İki Uçtan İşlem Yapılan Kuyruk

Çift uçlu kuyruk (iki uçtan işlem yapılan kuyruk), her iki uçta da ekleme ve silmeye izin verir. Java'nın Deque arayüzü LinkedList ve ArrayDeque tarafından uygulanır.

import java.util.Deque;
import java.util.ArrayDeque;

Deque<String> deque = new ArrayDeque<>();
deque.addFirst("A"); // front
deque.addLast("B");  // back
deque.addFirst("Z"); // new front

System.out.println(deque); // [Z, A, B]

Çift Uçlu Kuyruk Olarak ArrayDeque ve LinkedList

Çift uçlu kuyruk olarak ArrayDeque, genellikle LinkedList'e tercih edilir:

  • Öğe başına düğüm ek yükü yoktur
  • Daha iyi önbellek yerelliği sağlar
  • Yığın/kuyruk işlemleri biraz daha hızlıdır

Yalnızca List arayüzüne de ihtiyaç duyduğunuzda LinkedList'i seçin.

Çift Uçlu Kuyruk ile Yığın İşlemleri

Bir LIFO yığınını taklit etmek için push (addFirst) ve pop (removeFirst) kullanın. Eski Stack sınıfından kaçının — eşzamanlıdır ve kullanım dışı kalmıştır.

Deque<Integer> stack = new ArrayDeque<>();
stack.push(1);
stack.push(2);
stack.push(3);

System.out.println(stack.pop());  // 3
System.out.println(stack.peek()); // 2 (no removal)
System.out.println(stack.pop());  // 2

Çift Uçlu Kuyruk ile Kuyruk İşlemleri

Bir FIFO kuyruğunu taklit etmek için offer (addLast) ve poll (removeFirst) kullanın. offer başarısızlık durumunda false döndürür; add ise hata fırlatır.

Deque<String> queue = new ArrayDeque<>();
queue.offer("task1");
queue.offer("task2");
queue.offer("task3");

System.out.println(queue.poll());  // task1
System.out.println(queue.poll());  // task2
System.out.println(queue.size());  // 1

Çift Uçlu Kuyruk Yöntemleri Başvuru Tablosu

Çift uçlu kuyruk iki yöntem ailesi sağlar — biri istisna fırlatır, diğeri özel değerler döndürür:

  • addFirst/addLast ve offerFirst/offerLast
  • removeFirst/removeLast ve pollFirst/pollLast
  • getFirst/getLast ve peekFirst/peekLast

Boş çift uçlu kuyruklarda istisnalardan kaçınmak için offer/poll/peek ailesini tercih edin.

İki Yığınla Gerçek Örnek: Geri Alma/Yineleme

Çift uçlu kuyruğun klasik bir kullanım alanı: geri alma geçmişi bir yığındır. Yineleme başka bir yığındır.

Deque<String> undo = new ArrayDeque<>();
Deque<String> redo = new ArrayDeque<>();

undo.push("type 'Hello'");
undo.push("type ' World'");

String action = undo.pop();
System.out.println("Undone: " + action); // type ' World'
redo.push(action);

System.out.println("Redo top: " + redo.peek()); // type ' World'

Çift Uçlu Kuyruk ile Palindrom Denetimi

Çift uçlu kuyruklar, palindrom denetimini zarif hâle getirir — karakterleri iki uçtan aynı anda karşılaştırabilirsiniz.

Deque<Character> deque = new ArrayDeque<>();
for (char c : "racecar".toCharArray()) deque.add(c);

boolean isPalindrome = true;
while (deque.size() > 1) {
    if (!deque.pollFirst().equals(deque.pollLast())) {
        isPalindrome = false;
        break;
    }
}
System.out.println(isPalindrome); // true

Kuyrukla BFS

Genişlik Öncelikli Arama bir kuyruk kullanır. ArrayDeque, yarışmalı programlama ve çizge dolaşımı için BFS'de standart tercihtir.

import java.util.*;

// BFS on a simple adjacency list
Map<Integer,List<Integer>> graph = Map.of(
    1, List.of(2,3),
    2, List.of(4),
    3, List.of(4),
    4, List.of()
);
Deque<Integer> queue = new ArrayDeque<>();
Set<Integer> visited = new HashSet<>();
queue.offer(1);
while (!queue.isEmpty()) {
    int node = queue.poll();
    if (visited.add(node)) {
        System.out.print(node + " ");
        queue.addAll(graph.get(node));
    }
}

Yığınla DFS

Derinlik Öncelikli Arama bir yığın kullanır. Eski Stack sınıfı yerine yine ArrayDeque'i tercih edin.

Deque<Integer> stack = new ArrayDeque<>();
Set<Integer> visited = new HashSet<>();
stack.push(1);
while (!stack.isEmpty()) {
    int node = stack.pop();
    if (visited.add(node)) {
        System.out.print(node + " ");
        // push neighbors (will be processed in reverse order)
        List<Integer> neighbors = List.of(2, 3); // simplified
        for (int n : neighbors) if (!visited.contains(n)) stack.push(n);
    }
}

Boyut Denetimli Çift Uçlu Kuyruk

ArrayDeque dinamik olarak büyür; ancak sınırlı bir arabelleği taklit etmek için kapasiteyi elle zorlayabilirsiniz:

Deque<Integer> buffer = new ArrayDeque<>();
int MAX = 3;

for (int i = 1; i <= 5; i++) {
    if (buffer.size() >= MAX) {
        buffer.pollFirst(); // drop oldest
    }
    buffer.offerLast(i);
}
System.out.println(buffer); // [3, 4, 5]

Performans Notları

ArrayDeque, dolduğunda iki katına çıkan dairesel bir dizi kullanır. Tüm işlemlerin amortize maliyeti O(1)'dir. Önbellek verimliliği sayesinde çoğu karşılaştırmada LinkedList'ten daha iyi performans gösterir. Elle eşzamanlama yapmayın — eşzamanlılık için ConcurrentLinkedDeque veya engelleyici bir kuyruk kullanın.

Hızlı Kontrol

LIFO işlemleri için eski Stack sınıfı yerine hangi sınıfı tercih etmelisiniz?

Özet: Çift Uçlu Kuyruk İşlemleri

Ana çıkarımlar:

  • Çift uçlu kuyruk, her iki uçta da O(1) ekleme/silmeye izin verir
  • Yalnızca yığın/kuyruk kullanımı için ArrayDeque, LinkedList'e tercih edilir
  • push/pop → LIFO yığını; offer/poll → FIFO kuyruğu
  • Klasik kullanım alanları: geri alma/yineleme, BFS/DFS, kayan pencere, palindrom denetimi
  • Eski Stack ve Queue sınıflarından kaçının

Sıkça Sorulan Sorular

“Deque İşlemleri: Yığın ve Kuyruk” dersi ücretsiz mi?

Evet — “Deque İşlemleri: Yığın ve Kuyruk” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“Deque İşlemleri: Yığın ve Kuyruk” dersinde ne öğreneceğim?

Yığın (push/pop) ve kuyruk (offer/poll) davranışlarını uygulamak için LinkedList'i Deque olarak kullanın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Deque İşlemleri: Yığın ve Kuyruk” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. LinkedList'in İç Yapısı
  2. Deque İşlemleri: Yığın ve Kuyruk
  3. LinkedList ve ArrayList Karşılaştırması
  4. Sıralı İşleme için PriorityQueue
← Java Academy Sayfasına Dön