From 36938b584ea2d096d97a124b70da51f685850ff7 Mon Sep 17 00:00:00 2001 From: Zuhaitz Méndez Fernández de Aránguiz Date: Sun, 11 Jan 2026 21:13:29 +0000 Subject: A few examples, some more will be added soon. --- examples/data_structures/stack.zc | 81 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 examples/data_structures/stack.zc (limited to 'examples/data_structures/stack.zc') diff --git a/examples/data_structures/stack.zc b/examples/data_structures/stack.zc new file mode 100644 index 0000000..8f1fea5 --- /dev/null +++ b/examples/data_structures/stack.zc @@ -0,0 +1,81 @@ + +import "std.zc" + +struct Stack { + data: Vec; +} + +impl Stack { + fn new() -> Self { + return Self { data: Vec::new() }; + } + + fn push(self, item: T) { + self.data.push(item); + } + + fn pop(self) -> Option { + if self.data.length() == 0 { + return Option::None(); + } + return Option::Some(self.data.pop()); + } + + fn peek(self) -> Option { + if self.data.length() == 0 { + return Option::None(); + } + return Option::Some(self.data.last()); + } + + fn is_empty(self) -> bool { + return self.data.length() == 0; + } + + fn size(self) -> usize { + return self.data.length(); + } + + fn free(self) { + self.data.free(); + } +} + +fn main() { + "[Integer Stack]"; + var int_stack = Stack::new(); + defer int_stack.free(); + + "Pushing: 10, 20, 30"; + int_stack.push(10); + int_stack.push(20); + int_stack.push(30); + + "Size: {int_stack.size()}"; + var p = int_stack.peek(); + "Peek: {p.unwrap()}"; + + "Popping: "..; + while !int_stack.is_empty() { + var opt = int_stack.pop(); + "{opt.unwrap()} "..; + } + ""; + + ""; + "[String Stack]"; + var str_stack = Stack::new(); + defer str_stack.free(); + + str_stack.push(String::new("First")); + str_stack.push(String::new("Second")); + str_stack.push(String::new("Third")); + + "Popping: "..; + while !str_stack.is_empty() { + var opt_s = str_stack.pop(); + var s: String = opt_s.unwrap(); + "{s.c_str()} "..; + } + ""; +} -- cgit v1.2.3