Stack Generik dari Nol
LIFO parametrik tipe di atas allocator.
Stack Generik dari Nol adalah pelajaran Zig Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Zig Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Zig Academy mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
What a Stack Does
A stack is a LIFO collection: the last item you push is the first one you pop. Think of plates piled on a counter. 🍽️
Make It Generic
To hold any element type, write a function that takes a type and returns a struct type. Each call gives a stack tailored to that type.
fn Stack(comptime T: type) type {
return struct {};
}Store Items and an Allocator
Inside, the struct keeps a growable slice of items plus the allocator it borrows memory from. Zig never hides allocation.
return struct {
items: []T,
len: usize,
alloc: std.mem.Allocator,
};Refer to the Struct with @This
The returned struct is anonymous, so methods name their own type with @This(). That keeps every method fully generic.
const Self = @This();Initialize an Empty Stack
An init function takes the allocator and returns a fresh, empty stack. Nothing is allocated until you push.
fn init(a: std.mem.Allocator) Self {
return .{ .items = &.{}, .len = 0, .alloc = a };
}Push Can Fail
Growing the buffer may need memory, so push returns an error union. Callers handle the out-of-memory case explicitly.
fn push(self: *Self, value: T) !void {
// grow then store
}Reuse realloc to Grow
To make room, ask the allocator to realloc the slice to a larger size. The new length is up to your growth policy.
self.items = try self.alloc.realloc(self.items, self.len + 1);
self.items[self.len] = value;
self.len += 1;Pop the Top Value
pop returns an optional: the top item if the stack has one, or null when it is empty. No crashes on an empty stack.
fn pop(self: *Self) ?T {
if (self.len == 0) return null;
self.len -= 1;
return self.items[self.len];
}Free What You Allocated
Because you own the buffer, you must give it back. A deinit method frees the slice through the same allocator.
fn deinit(self: *Self) void {
self.alloc.free(self.items);
}Use It
Build a concrete type by calling the function, then init it. Stack(i32) is a real, fully checked type ready to push integers.
var s = Stack(i32).init(allocator);
defer s.deinit();
try s.push(42);One Definition, Many Stacks
Call the function with different types and each is a separate, specialized stack. Stack(u8) and Stack(f64) share no code accidentally.
Quick Check
Your generic stack needs heap memory to grow. Where does that memory come from?
Recap
A generic stack is a type-returning function holding items plus an allocator. Push grows, pop returns an optional, and deinit frees. 🎯
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Stack Generik dari Nol” gratis?
Ya — teks lengkap “Stack Generik dari Nol” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Zig Academy, upgrade ke CoddyKit PRO. Kursus Zig Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Stack Generik dari Nol”?
LIFO parametrik tipe di atas allocator. Kamu berlatih Zig Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Zig Academy?
Tidak diperlukan pengalaman sebelumnya. Zig Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Stack Generik dari Nol” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Zig Academy ini?
Ya. Setiap pelajaran Zig Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Stack Generik dari Nol
- Linked List Tunggal
- Menggunakan HashMap dan AutoHashMap
- Pembuatan Profil dan Pertukaran Keamanan