mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 14:18:20 +08:00 
			
		
		
		
	* Refine some details and coding style for Rust codes * Update coding style for Rust codes * Update time_complexity.rs * Update array.rs * Update leetcode_two_sum.rs * Update hash_map.rs * Update file headers * Update coding style for Rust codes and Zig codes * Update coding style for Rust codes and Zig codes --------- Co-authored-by: Yudong Jin <krahets@163.com>
		
			
				
	
	
		
			85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
/*
 | 
						|
 * File: array_stack.rs
 | 
						|
 * Created Time: 2023-02-05
 | 
						|
 * Author: WSL0809 (wslzzy@outlook.com), sjinzh (sjinzh@gmail.com)
 | 
						|
 */
 | 
						|
 | 
						|
include!("../include/include.rs");
 | 
						|
 | 
						|
/* 基于数组实现的栈 */
 | 
						|
struct ArrayStack<T> {
 | 
						|
    stack: Vec<T>,
 | 
						|
}
 | 
						|
 | 
						|
impl<T> ArrayStack<T> {
 | 
						|
    /* 初始化栈 */
 | 
						|
    fn new() -> ArrayStack<T> {
 | 
						|
        ArrayStack::<T> { stack: Vec::<T>::new() }
 | 
						|
    }
 | 
						|
 | 
						|
    /* 获取栈的长度 */
 | 
						|
    fn size(&self) -> usize {
 | 
						|
        self.stack.len()
 | 
						|
    }
 | 
						|
 | 
						|
    /* 判断栈是否为空 */
 | 
						|
    fn is_empty(&self) -> bool {
 | 
						|
        self.size() == 0
 | 
						|
    }
 | 
						|
 | 
						|
    /* 入栈 */
 | 
						|
    fn push(&mut self, num: T) {
 | 
						|
        self.stack.push(num);
 | 
						|
    }
 | 
						|
 | 
						|
    /* 出栈 */
 | 
						|
    fn pop(&mut self) -> Option<T> {
 | 
						|
        match self.stack.pop() {
 | 
						|
            Some(num) => Some(num),
 | 
						|
            None => None,
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /* 访问栈顶元素 */
 | 
						|
    fn peek(&self) -> Option<&T> {
 | 
						|
        if self.is_empty() { panic!("栈为空") };
 | 
						|
        self.stack.last()
 | 
						|
    }
 | 
						|
 | 
						|
    /* 返回 &Vec */
 | 
						|
    fn to_array(&self) -> &Vec<T> {
 | 
						|
        &self.stack
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/* Driver Code */
 | 
						|
fn main() {
 | 
						|
    // 初始化栈
 | 
						|
    let mut stack = ArrayStack::<i32>::new();
 | 
						|
 | 
						|
    // 元素入栈
 | 
						|
    stack.push(1);
 | 
						|
    stack.push(3);
 | 
						|
    stack.push(2);
 | 
						|
    stack.push(5);
 | 
						|
    stack.push(4);
 | 
						|
    print!("栈 stack = ");
 | 
						|
    print_util::print_array(stack.to_array());
 | 
						|
 | 
						|
    //访问栈顶元素
 | 
						|
    let peek = stack.peek().unwrap();
 | 
						|
    print!("\n栈顶元素 peek = {}", peek);
 | 
						|
 | 
						|
    // 元素出栈
 | 
						|
    let pop = stack.pop().unwrap();
 | 
						|
    print!("\n出栈元素 pop = {pop},出栈后 stack = ");
 | 
						|
    print_util::print_array(stack.to_array());
 | 
						|
 | 
						|
    // 获取栈的长度
 | 
						|
    let size = stack.size();
 | 
						|
    print!("\n栈的长度 size = {size}");
 | 
						|
 | 
						|
    // 判断是否为空
 | 
						|
    let is_empty = stack.is_empty();
 | 
						|
    print!("\n栈是否为空 = {is_empty}");
 | 
						|
} |