diff --git a/Cargo.lock b/Cargo.lock index a7f1b01..0a7927d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,6 +4,10 @@ name = "binary_tree_postorder_traversal" version = "0.1.0" +[[package]] +name = "implement_queue_using_stacks" +version = "0.1.0" + [[package]] name = "kth_largest" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index f2fb8c2..f480a08 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,4 +6,5 @@ members = [ "three_sum", "binary_tree_postorder_traversal", "two_sum", + "implement_queue_using_stacks", ] diff --git a/README.md b/README.md index 4c1e204..388d22d 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,9 @@ Resolving problems of LeetCode in RustLang. * [1. Two Sum](./two_sum/src/lib.rs) * [7. Reverse Integer](./reverse_integer/src/lib.rs) * [15. 3 Sum](./three_sum/src/lib.rs) -* [215. Kth Largest Element in an Array](./kth_largest/src/lib.rs) * [145. Binary Tree Postorder Traversal](./binary_tree_postorder_traversal/src/lib.rs) +* [215. Kth Largest Element in an Array](./kth_largest/src/lib.rs) +* [232. Implement Queue using Stacks](./implement_queue_using_stacks/src/lib.rs) ## Document diff --git a/implement_queue_using_stacks/Cargo.toml b/implement_queue_using_stacks/Cargo.toml new file mode 100644 index 0000000..4b7fa00 --- /dev/null +++ b/implement_queue_using_stacks/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "implement_queue_using_stacks" +version = "0.1.0" +authors = ["Ryan Li "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/implement_queue_using_stacks/src/lib.rs b/implement_queue_using_stacks/src/lib.rs new file mode 100644 index 0000000..5309288 --- /dev/null +++ b/implement_queue_using_stacks/src/lib.rs @@ -0,0 +1,54 @@ +/*! + * # 232. Implement Queue using Stacks + * + * * [Problem link](https://leetcode.com/problems/implement-queue-using-stacks/) + */ + +#![allow(dead_code)] + +struct MyQueue { + start: usize, + data: Vec, +} + +impl MyQueue { + fn new() -> Self { + MyQueue { + start: 0, + data: vec![], + } + } + + fn push(&mut self, x: i32) { + self.data.push(x); + } + + fn pop(&mut self) -> i32 { + let v = self.data[self.start]; + self.start += 1; + v + } + + fn peek(&self) -> i32 { + self.data[self.start] + } + + fn empty(&self) -> bool { + self.start == self.data.len() + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_example() { + let mut queue = MyQueue::new(); + queue.push(1); + queue.push(2); + assert_eq!(queue.peek(), 1); + assert_eq!(queue.pop(), 1); + assert!(!queue.empty()); + } +}