Stack Generik
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 59 dari 61.
Tantangan
Mudahstack adalah struktur data dasar yang mengikuti prinsip "Last In, First Out" (LIFO): item terakhir yang ditambahkan adalah item pertama yang dikeluarkan. Bayangkan tumpukan piring: kamu menambahkan piring ke bagian atas dan mengambilnya dari bagian atas.
Mari kita membuat struktur data Stack generik yang dapat menampung elemen dengan tipe apa pun! Stack mengikuti prinsip "Last In, First Out", seperti tumpukan buku yang hanya bisa kamu tambahkan atau ambil dari bagian atas.
Kamu akan mengatur kodemu dalam dua file:
stack.rs: Definisikan structStack<T>generik yang menggunakanVec<T>secara internal untuk menyimpan elemen. Implementasikan tiga method:newuntuk membuat stack kosong,pushuntuk menambahkan elemen ke bagian atas, danpopuntuk menghapus serta mengembalikan elemen teratas (mengembalikanOption<T>karena stack mungkin kosong).main.rs: Sertakan module stack-mu dan tunjukkan cara kerja Stack dengan bilangan bulat. Buat stack, masukkan angka yang diberikan ke dalamnya, lalu keluarkan elemen dan cetak masing-masing. Gunakanunwrap_oruntuk menanganiOptionyang dikembalikan oleh pop. Jika stack kosong, gunakan-1sebagai nilai default.
Stack memerlukan dua operasi penting:
- push: menambahkan elemen ke bagian atas stack
- pop: menghapus dan mengembalikan elemen teratas
Method pop sebaiknya mengembalikan Option<T> karena stack mungkin kosong. Tipe Vec sudah memiliki method pop yang mengembalikan Option<T>, yang bisa kamu manfaatkan dalam implementasimu.
Stack-mu seharusnya bekerja seperti ini: ketika kamu memasukkan nilai 10, 20, dan 30 (dalam urutan tersebut), mengeluarkan elemen tiga kali seharusnya menghasilkan 30, 20, dan 10 (urutan terbalik). Pemanggilan pop keempat pada stack kosong seharusnya mengembalikan nilai default.
Cetak setiap nilai yang dikeluarkan pada barisnya sendiri:
30
20
10
-1Contohnya, dengan input 5, 15, dan 25:
25
15
5
-1Kamu akan menerima tiga input: tiga bilangan bulat untuk dimasukkan ke stack (parse masing-masing sebagai i32). Setelah memasukkan ketiganya, lakukan pop empat kali untuk menunjukkan pop yang berhasil dan kasus stack kosong.
Coba sendiri
mod stack;
use stack::Stack;
fn main() {
// Baca tiga bilangan bulat dari input
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: Buat Stack baru
// TODO: push ketiga bilangan ke stack (num1, num2, num3 dalam urutan itu)
// TODO: Lakukan pop empat kali dan cetak setiap hasilnya
// Gunakan unwrap_or(-1) untuk menangani stack kosong
}
Semua pelajaran di Pemrograman Berorientasi Objek
1Method dan Perilaku
Pengantar Blok ImplementasiParameter SelfMethod MutableFungsi TerkaitBeberapa Blok ImplementasiMethod BerantaiRangkuman: Aksi Persegi Panjang4Proyek: Hewan Peliharaan Virtual
Mendefinisikan Hewan PeliharaanMemberi Makan Hewan Peliharaan2Enkapsulasi dan module
Dasar-Dasar moduleKata Kunci publicField privateGetterSetterRekap: Loker AmanLatihan sendiri: Compiler Rust online