Menu
Coddy logo textTech

Jenerik Yığın

Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 59 / 61.

challenge icon

Görev

Kolay

Bir stack, "Last In, First Out" (LIFO) ilkesini izleyen temel bir veri yapısıdır: en son eklenen item, ilk çıkarılandır. Bir tabak yığını düşünün: tabakları üste eklersiniz ve üstten çıkarırsınız.

Her türden element tutabilen generic bir Stack veri yapısı oluşturalım! Bir stack, yalnızca üstten ekleme veya çıkarma yapabildiğiniz kitap yığını gibi "Last In, First Out" ilkesini izler.

kodunuzu iki dosyada düzenleyeceksiniz:

  • stack.rs: Elementleri dahili olarak depolamak için Vec<T> kullanan generic Stack<T> struct'ınızı Define edin. Üç method Implement edin: boş bir stack oluşturmak için new, üste bir element eklemek için push ve en üstteki elementi kaldırıp döndürmek için pop (stack empty olabileceğinden Option<T> döndürür).
  • main.rs: stack module'ünüzü içeri aktarın ve Stack'inizin integers ile çalıştığını gösterin. Bir stack Create edin, sağlanan numbers değerlerini onto stack'e push edin, ardından element'leri çıkarıp her birini print edin. pop tarafından döndürülen Option'ı handle etmek için unwrap_or uses edin; stack empty ise varsayılan değer olarak -1 kullanın.

Bir stack'in iki temel operation'ı vardır:

  • push: stack'in üstüne bir element adds
  • pop: en üstteki elementi removes ve döndürür

pop method'u, stack empty olabileceğinden bir Option<T> döndürmelidir. Vec type'ı zaten Option<T> döndüren bir pop method'una sahiptir; bunu Implementasyonunuzda kullanabilirsiniz.

Stack'iniz şu şekilde çalışmalıdır: 10, 20 ve 30 değerlerini (bu order ile) push ettiğinizde, üç kez pop yapmak size 30, 20 ve 10 değerlerini (ters sırayla) vermelidir. Empty bir stack üzerinde yapılan dördüncü pop, varsayılan değeri döndürmelidir.

Çıkarılan her değeri kendi satırında print edin:

30
20
10
-1

Örneğin, inputs 5, 15 ve 25 ile:

25
15
5
-1

Üç input alacaksınız: stack'e push edilecek üç integer (her birini i32 olarak parse edin). Üçünü de push ettikten sonra, hem başarılı pop'ları hem de empty stack case'ini göstermek için dört kez pop yapın.

Kendin dene

mod stack;

use stack::Stack;

fn main() {
    // Girdiden üç tamsayı oku
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let num1: i32 = input1.trim().parse().expect("Invalid number");

    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let num2: i32 = input2.trim().parse().expect("Invalid number");

    let mut input3 = String::new();
    std::io::stdin().read_line(&mut input3).expect("Failed to read line");
    let num3: i32 = input3.trim().parse().expect("Invalid number");

    // TODO: Yeni bir Stack oluştur

    // TODO: Üç sayıyı yığına ekle (num1, num2, num3 sırasıyla)

    // TODO: Dört kez pop yap ve her sonucu yazdır
    // Boş yığın durumunu ele almak için unwrap_or(-1) kullan
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Rust derleyicisi