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