Initial commit.
This commit is contained in:
commit
434881f877
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/target
|
||||
main
|
||||
.idea
|
7
Cargo.lock
generated
Normal file
7
Cargo.lock
generated
Normal file
@ -0,0 +1,7 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "first-rust"
|
||||
version = "0.1.0"
|
6
Cargo.toml
Normal file
6
Cargo.toml
Normal file
@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "first-rust"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
70
src/main.rs
Normal file
70
src/main.rs
Normal file
@ -0,0 +1,70 @@
|
||||
struct Greeter {
|
||||
greeting: &'static str,
|
||||
}
|
||||
|
||||
impl Greeter {
|
||||
fn new(greeting: &'static str) -> Greeter {
|
||||
Greeter { greeting }
|
||||
}
|
||||
|
||||
fn greet(&self) {
|
||||
println!("{}", self.greeting);
|
||||
}
|
||||
}
|
||||
|
||||
struct LinkedList<T> {
|
||||
head: Link<T>,
|
||||
}
|
||||
|
||||
enum Link<T> {
|
||||
Empty,
|
||||
More(Box<Node<T>>),
|
||||
}
|
||||
|
||||
struct Node<T> {
|
||||
data: T,
|
||||
next: Link<T>,
|
||||
}
|
||||
|
||||
impl<T> LinkedList<T> {
|
||||
fn new() -> Self {
|
||||
LinkedList { head: Link::Empty }
|
||||
}
|
||||
|
||||
fn push(&mut self, data: T) {
|
||||
self.head = Link::More(Box::new(Node {
|
||||
data,
|
||||
next: std::mem::replace(&mut self.head, Link::Empty),
|
||||
}));
|
||||
}
|
||||
|
||||
fn pop(&mut self) -> Option<T> {
|
||||
match std::mem::replace(&mut self.head, Link::Empty) {
|
||||
Link::Empty => None,
|
||||
Link::More(node) => {
|
||||
self.head = node.next;
|
||||
Some(node.data)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Iterator for LinkedList<T> {
|
||||
type Item = T;
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
self.pop()
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
Greeter::new("Hello, Jesse!").greet();
|
||||
|
||||
let mut my_linked_list = LinkedList::new();
|
||||
my_linked_list.push(Greeter::new("Hello"));
|
||||
my_linked_list.push(Greeter::new("Beautiful"));
|
||||
my_linked_list.push(Greeter::new("World"));
|
||||
|
||||
for greeter in my_linked_list {
|
||||
greeter.greet();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user