Jenerik Yığın
Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 59 / 61.
Görev
KolayBir yığın (stack), "Son Giren İlk Çıkar" (LIFO) prensibini takip eden temel bir veri yapısıdır; yani eklenen son öğe, çıkarılan ilk öğedir. Bir tabak yığınını düşünün: tabakları en üste ekler ve en üstten çıkarırsınız.
Herhangi bir türde öğe tutabilen genel (generic) bir Stack veri yapısı inşa edelim! Bir yığın, "Son Giren İlk Çıkar" prensibini takip eder; tıpkı sadece en üstten ekleme yapabildiğiniz veya çıkarabildiğiniz bir kitap yığını gibi.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
stack.rs: Öğeleri depolamak için dahili olarak birVec<T>kullanan genelStack<T>yapınızı tanımlayın. Üç metot uygulayın: boş bir yığın oluşturmak içinnew, en üste bir öğe eklemek içinpushve en üstteki öğeyi çıkarıp döndürmek içinpop(yığın boş olabileceği içinOption<T>döndürür).main.rs: Yığın modülünüzü dahil edin ve Stack yapınızın tam sayılarla çalışmasını gösterin. Bir yığın oluşturun, sağlanan sayıları üzerine push edin, ardından öğeleri pop ederek her birini yazdırın. pop tarafından döndürülenOptiondeğerini işlemek içinunwrap_orkullanın; eğer yığın boşsa, varsayılan değer olarak-1kullanın.
Bir yığının iki temel işleme ihtiyacı vardır:
- push — yığının en üstüne bir öğe ekler
- pop — en üstteki öğeyi çıkarır ve döndürür
Yığın boş olabileceği için pop metodu bir Option<T> döndürmelidir. Vec türü zaten Option<T> döndüren bir pop metoduna sahiptir ve bunu kendi uygulamanızda kullanabilirsiniz.
Yığınınız şu şekilde çalışmalıdır: 10, 20 ve 30 değerlerini (bu sırayla) push ettiğinizde, üç kez pop etmek size 30, 20 ve 10 (ters sıra) vermelidir. Boş bir yığın üzerinde dördüncü bir pop işlemi varsayılan değeri döndürmelidir.
Her pop edilen değeri kendi satırında yazdırın:
30
20
10
-1Örneğin, 5, 15 ve 25 girdileriyle:
25
15
5
-1Üç girdi alacaksınız: yığına push edilecek üç tam sayı (her birini i32 olarak ayrıştırın). Üçünü de push ettikten sonra, hem başarılı pop işlemlerini hem de boş yığın durumunu göstermek için dört kez pop yapın.
Kendin dene
mod stack;
use stack::Stack;
fn main() {
// Girişten üç tam sayı 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 (sırasıyla num1, num2, num3)
// TODO: Dört kez yığından çıkar (pop) ve her sonucu yazdır
// Boş yığın durumunu yönetmek için unwrap_or(-1) kullanın
}
Object Oriented Programming 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 Player