Menu
CoddyTech

Stack Generik

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 59 dari 61.

challenge icon

Tantangan

Mudah

stack 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 struct Stack<T> generik yang menggunakan Vec<T> secara internal untuk menyimpan elemen. Implementasikan tiga method: new untuk membuat stack kosong, push untuk menambahkan elemen ke bagian atas, dan pop untuk menghapus serta mengembalikan elemen teratas (mengembalikan Option<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. Gunakan unwrap_or untuk menangani Option yang dikembalikan oleh pop. Jika stack kosong, gunakan -1 sebagai 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
-1

Contohnya, dengan input 5, 15, dan 25:

25
15
5
-1

Kamu 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

Latihan sendiri: Compiler Rust online