Struct algorithms_rs::stack::Stack
source · pub struct Stack<T> { /* private fields */ }
Expand description
stack data structure
在栈中,被删除的是最近插入的元素: 栈的实现是一种后进先出策略。 这里采用数组实现栈,还有别的方式也是可以实现栈的。
栈的操作
栈的操作有,栈上的INSERT操作称为压入PUSH,而无元素参数的DELETE操作称为弹出POP。
Implementations§
source§impl<T: Clone> Stack<T>
impl<T: Clone> Stack<T>
sourcepub fn new() -> Stack<T>
pub fn new() -> Stack<T>
Creating an empty stack
use algorithms_rs::Stack;
let stack = Stack::<i32>::new();
assert_eq!(stack.is_empty(), true);
sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Determine if stack is empty
use algorithms_rs::Stack;
let mut stack = Stack::<i32>::new();
assert_eq!(stack.is_empty(), true);
stack.push(2);
assert_eq!(stack.is_empty(), false);
STACK-EMPTY(S)
if S.top == 0
return true
else return false
Examples found in repository?
src/stack.rs (line 112)
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
pub fn pop(&mut self) -> anyhow::Result<T> {
if self.is_empty() {
Err(anyhow::anyhow!("underflow"))
} else {
self.top -= 1;
Ok(self.data.remove(self.top))
}
}
/// Return the top element of the stack
///
/// ```rust
/// use algorithms_rs::Stack;
///
/// let mut stack = Stack::<i32>::new();
///
/// assert_eq!(stack.peek(), None);
///
/// stack.push(1);
/// stack.push(2);
///
/// assert_eq!(stack.peek(), Some(&2));
/// assert_eq!(stack.is_empty(), false);
/// ```
pub fn peek(&self) -> Option<&T> {
if self.is_empty() {
return None;
}
self.data.get(self.top - 1)
}
sourcepub fn push(&mut self, element: T)
pub fn push(&mut self, element: T)
Put an element into the top of the stack of stack
use algorithms_rs::Stack;
let mut stack = Stack::<i32>::new();
stack.push(1);
assert_eq!(stack.is_empty(), false);
PUSH(S, x)
S.top = S.top + 1
S[S.top] = x
sourcepub fn pop(&mut self) -> Result<T>
pub fn pop(&mut self) -> Result<T>
Remove an element from the top of the stack of stack
use algorithms_rs::Stack;
let mut stack = Stack::<i32>::new();
stack.push(1);
let element = stack.pop().unwrap();
assert_eq!(element, 1);
assert_eq!(stack.is_empty(), true);
if let Err(err) = stack.pop() {
assert_eq!(err.to_string(), "underflow".to_string())
}
POP(S)
if STACK-EMPTY(S)
error "underflow"
else
S.top = S.top - 1
return S[S.top + 1]