From 5f7f8894a9ba43431d4c232fdceff6c36001828e Mon Sep 17 00:00:00 2001 From: PeanutbutterWarrior <50717143+PeanutbutterWarrior@users.noreply.github.com> Date: Mon, 8 Nov 2021 00:29:19 +0000 Subject: [PATCH 1/6] Implement Stack --- contents/stacks_and_queues/code/rust/Stack.rs | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 contents/stacks_and_queues/code/rust/Stack.rs diff --git a/contents/stacks_and_queues/code/rust/Stack.rs b/contents/stacks_and_queues/code/rust/Stack.rs new file mode 100644 index 000000000..78abff38e --- /dev/null +++ b/contents/stacks_and_queues/code/rust/Stack.rs @@ -0,0 +1,45 @@ +struct Stack { + list: Vec +} + +impl Stack { + fn new() -> Self { + Stack { + list: Vec::new(), + } + } + + // Note that this returns a reference to the value + // This is in contrast to pop which gives ownership of the value + fn top(&self) -> Option<&T> { + if self.list.len() > 0 { + Some(&self.list[self.list.len() - 1]) + } else { + None + } + } + + fn pop(&mut self) -> Option { + self.list.pop() + } + + fn push(&mut self, item: T) { + self.list.push(item); + } + + fn size(&self) -> usize { + self.list.len() + } +} + +fn main() { + let mut i32stack: Stack = Stack::new(); + + i32stack.push(4); + i32stack.push(5); + i32stack.push(6); + + println!("{:?}", i32stack.pop().unwrap()); + println!("{:?}", i32stack.size()); + println!("{:?}", i32stack.top().unwrap()); +} From ae101b80addd7574fa9f397e976d598d7ceeb928 Mon Sep 17 00:00:00 2001 From: PeanutbutterWarrior <50717143+PeanutbutterWarrior@users.noreply.github.com> Date: Mon, 8 Nov 2021 00:29:36 +0000 Subject: [PATCH 2/6] Implement Queue --- contents/stacks_and_queues/code/rust/Queue.rs | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 contents/stacks_and_queues/code/rust/Queue.rs diff --git a/contents/stacks_and_queues/code/rust/Queue.rs b/contents/stacks_and_queues/code/rust/Queue.rs new file mode 100644 index 000000000..645babef3 --- /dev/null +++ b/contents/stacks_and_queues/code/rust/Queue.rs @@ -0,0 +1,47 @@ +use std::collections::VecDeque; + +struct Queue { + list: VecDeque +} + +impl Queue { + fn new() -> Self { + Queue{ + list: VecDeque::new(), + } + } + + // Note that this returns a reference to the value + // This is in contrast to dequeue which gives ownership of the value + fn front(&self) -> Option<&T> { + if self.list.len() > 0 { + Some(&self.list[0]) + } else { + None + } + } + + fn dequeue(&mut self) -> Option { + self.list.pop_front() + } + + fn enqueue(&mut self, item: T) { + self.list.push_back(item); + } + + fn size(&self) -> usize { + self.list.len() + } +} + +fn main() { + let mut i32queue = Queue::new(); + + i32queue.enqueue(4); + i32queue.enqueue(5); + i32queue.enqueue(6); + + println!("{:?}", i32queue.dequeue().unwrap()); // 4 + println!("{:?}", i32queue.size()); // 2 + println!("{:?}", i32queue.front().unwrap()); // 5 +} From 323d6405b2940ddc3eb254dd9963fc2e6030e7ba Mon Sep 17 00:00:00 2001 From: PeanutbutterWarrior <50717143+PeanutbutterWarrior@users.noreply.github.com> Date: Mon, 8 Nov 2021 00:38:36 +0000 Subject: [PATCH 3/6] Update markdown page --- CONTRIBUTORS.md | 5 +++-- contents/stacks_and_queues/stacks_and_queues.md | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 82f3c173a..fc3113ecc 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -51,7 +51,7 @@ This file lists everyone, who contributed to this repo and wanted to show up her - Vincent Zalzal - Jonathan D B Van Schenck - James Goytia -- Sammy Plat +- Sammy Plat - Jonathan Dönszelmann - Ishaan Verma - Delphi1024 @@ -60,4 +60,5 @@ This file lists everyone, who contributed to this repo and wanted to show up her - Ridham177 - Hugo Salou - Dimitri Belopopsky -+ Henrik Abel Christensen +- Henrik Abel Christensen +- Peanutbutter_Warrior diff --git a/contents/stacks_and_queues/stacks_and_queues.md b/contents/stacks_and_queues/stacks_and_queues.md index 89a77be9a..6a47e2e2c 100644 --- a/contents/stacks_and_queues/stacks_and_queues.md +++ b/contents/stacks_and_queues/stacks_and_queues.md @@ -20,6 +20,8 @@ Here is a simple implementation of a stack: [import, lang:"typescript"](code/typescript/stack.ts) {% sample lang="java" %} [import, lang:"java"](code/java/Stack.java) +{% sample lang="rust" %} +[import, lang:"rust"](code/rust/Stack.rs) {% endmethod %} Here is a simple implementation of a queue: @@ -28,6 +30,8 @@ Here is a simple implementation of a queue: [import, lang:"typescript"](code/typescript/queue.ts) {% sample lang="java" %} [import, lang:"java" ](code/java/Queue.java) +{% sample lang="rust" %} +[import, lang:"rust" ](code/rust/Queue.rs) {% endmethod %} From 330d09928d0fc9c5bdae5e0f38ed1534ee68d849 Mon Sep 17 00:00:00 2001 From: PeanutbutterWarrior <50717143+PeanutbutterWarrior@users.noreply.github.com> Date: Mon, 8 Nov 2021 00:43:02 +0000 Subject: [PATCH 4/6] Add comments with output of prints --- contents/stacks_and_queues/code/rust/Stack.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contents/stacks_and_queues/code/rust/Stack.rs b/contents/stacks_and_queues/code/rust/Stack.rs index 78abff38e..35e722487 100644 --- a/contents/stacks_and_queues/code/rust/Stack.rs +++ b/contents/stacks_and_queues/code/rust/Stack.rs @@ -39,7 +39,7 @@ fn main() { i32stack.push(5); i32stack.push(6); - println!("{:?}", i32stack.pop().unwrap()); - println!("{:?}", i32stack.size()); - println!("{:?}", i32stack.top().unwrap()); + println!("{:?}", i32stack.pop().unwrap()); // 6 + println!("{:?}", i32stack.size()); // 2 + println!("{:?}", i32stack.top().unwrap()); // 5 } From 058f3b1f202b288210ed6340bcb44f10785de084 Mon Sep 17 00:00:00 2001 From: PeanutbutterWarrior <50717143+PeanutbutterWarrior@users.noreply.github.com> Date: Mon, 29 Nov 2021 17:36:45 +0000 Subject: [PATCH 5/6] Use equivalent methods instead of reimplementing them --- contents/stacks_and_queues/code/rust/Queue.rs | 6 +----- contents/stacks_and_queues/code/rust/Stack.rs | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/contents/stacks_and_queues/code/rust/Queue.rs b/contents/stacks_and_queues/code/rust/Queue.rs index 645babef3..0f432e621 100644 --- a/contents/stacks_and_queues/code/rust/Queue.rs +++ b/contents/stacks_and_queues/code/rust/Queue.rs @@ -14,11 +14,7 @@ impl Queue { // Note that this returns a reference to the value // This is in contrast to dequeue which gives ownership of the value fn front(&self) -> Option<&T> { - if self.list.len() > 0 { - Some(&self.list[0]) - } else { - None - } + self.list.front() } fn dequeue(&mut self) -> Option { diff --git a/contents/stacks_and_queues/code/rust/Stack.rs b/contents/stacks_and_queues/code/rust/Stack.rs index 35e722487..13010c3f0 100644 --- a/contents/stacks_and_queues/code/rust/Stack.rs +++ b/contents/stacks_and_queues/code/rust/Stack.rs @@ -12,11 +12,7 @@ impl Stack { // Note that this returns a reference to the value // This is in contrast to pop which gives ownership of the value fn top(&self) -> Option<&T> { - if self.list.len() > 0 { - Some(&self.list[self.list.len() - 1]) - } else { - None - } + self.list.last() } fn pop(&mut self) -> Option { From cadad08c8e5eb8ea3916d3c0d98104111b51aeef Mon Sep 17 00:00:00 2001 From: PeanutbutterWarrior <50717143+PeanutbutterWarrior@users.noreply.github.com> Date: Mon, 29 Nov 2021 21:45:49 +0000 Subject: [PATCH 6/6] Add SConscript file --- contents/stacks_and_queues/code/rust/SConscript | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 contents/stacks_and_queues/code/rust/SConscript diff --git a/contents/stacks_and_queues/code/rust/SConscript b/contents/stacks_and_queues/code/rust/SConscript new file mode 100644 index 000000000..0c3f15913 --- /dev/null +++ b/contents/stacks_and_queues/code/rust/SConscript @@ -0,0 +1,10 @@ +Import('*') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.rustc(f'#/build/rust/stack', '#/contents/stacks_and_queues/code/rust/Stack.rs') +env.Clean('rust', f'#/build/rust/stack.pdb') + +env.rustc(f'#/build/rust/queue', '#/contents/stacks_and_queues/code/rust/Queue.rs') +env.Clean('rust', f'#/build/rust/queue.pdb') \ No newline at end of file