Jenerik Yığın
Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 59 / 61.
Görev
KolayBir 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çinVec<T>kullanan genericStack<T>struct'ınızı Define edin. Üç method Implement edin: boş bir stack oluşturmak içinnew, üste bir element eklemek içinpushve en üstteki elementi kaldırıp döndürmek içinpop(stack empty olabileceğindenOption<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.poptarafından döndürülenOption'ı handle etmek içinunwrap_oruses edin; stack empty ise varsayılan değer olarak-1kullanı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
1Metotlar ve Davranış
Uygulama Bloklarına GirişSelf ParametresiDeğiştirilebilir Metotlarİlişkili FonksiyonlarBirden Fazla Uygulama BloğuMetot ZincirlemeÖzet - Dikdörtgen Eylemleri4Proje: Sanal Evcil Hayvan
Evcil Hayvanı TanımlamaEvcil Hayvanı Besleme2Kapsülleme ve Modüller
Modül TemelleriPublic Anahtar KelimesiPrivate AlanlarGetter'larSetter'larÖzet - Güvenli Kasa5Generic Yapılar
Generic Struct'larGeneric MetotlarÇoklu Generic TürlerGeneric FonksiyonlarÖzet - Koordinat Noktası8Sınırlandırıcı Olarak Trait'ler
Trait Sınırlandırıcı SözdizimiÇoklu SınırlandırıcılarWhere CümleciğiTrait'ler ile Tip DöndürmeÖzet - Generic Yazıcı11Rust'ta Tasarım Kalıpları
Newtype KalıbıKompozisyonDrop Trait'iFrom ve IntoÖzet - Smart Pointer Mock3İleri Seviye Enum'lar
Veri İçeren Enum'larEnum MetotlarıVeri Varyantlarını EşlemeOption Enum'ına Yeniden BakışÖzet - Shape Enum6Trait Tanımlama
Trait Nedir?Traitleri UygulamaVarsayılan UygulamalarVarsayılanları Geçersiz KılmaParametreli TraitlerÖzet - Media PlayerKendi başına pratik yap: Online Rust derleyicisi