影片地址
頭條地址:https://www.ixigua.com/i676544267458235648...
B站地址:https://www.bilibili.com/video/av78062009?...
網易雲課堂地址:https://study.163.com/course/introduction....
github地址
棧介紹
棧和佇列一樣,只能從固定的方向進出,不過和佇列不同的是,佇列是先進先出,而棧則是後進先出。也就是說,棧只能從一端進行新增和刪除。
棧操作
- 初始化;
- 入棧;
- 出棧;
- 獲取棧頂位置。
原始碼實現
本實現藉助vector進行實現,在實現時,限定棧的大小。
#[derive(Debug)]
struct Stack<T> {
data: Vec<T>,
top: usize,
}
impl <T> Stack<T> {
fn new(size: usize) -> Self {
Stack {
data: Vec::with_capacity(size),
top: 0,
}
}
fn push(&mut self, item: T) -> Result<(), String> {
if self.top >= self.data.capacity() {
return Err(String::from("There is no space in stack!"))
}
self.data.push(item);
self.top += 1;
Ok(())
}
fn pop(&mut self) -> Option<T> {
if self.top == 0 {
return None
}
self.top -= 1;
self.data.pop()
}
fn top(&self) -> usize {
self.top
}
}
fn main() {
let mut s = Stack::new(4);
if let Err(error) = s.push(1) {
println!("err: {}", error);
}
if let Err(error) = s.push(2) {
println!("err: {}", error);
}
println!("stack : {:?}", s);
for _ in 0..3 {
if let Some(a) = s.pop() {
println!("a = {}", a);
} else {
println!("stack empty");
}
}
println!("top is {}", s.top());
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結