题解 | #【模板】栈#

【模板】栈

https://www.nowcoder.com/practice/104ce248c2f04cfb986b92d0548cccbf

use std::io::{self, *};
use std::result::Result;

struct Stack {
    s: [i32; 100_010],
    tt: usize,
}

impl Stack {
    fn new() -> Stack {
        Stack {
            s: [0; 100_010],
            tt: usize::MAX,
        }
    }

    fn push(&mut self, x: i32) {
        self.tt += 1;
        self.s[self.tt] = x;
    }

    fn pop(&mut self) -> Result<(), &'static str> {
        if self.tt != usize::MAX {
            println!("{}", self.s[self.tt]);
            self.tt -= 1;
            Ok(())
        } else {
            Err("error")
        }
    }

    fn top(&self) -> Result<(), &'static str> {
        if self.tt != usize::MAX {
            println!("{}", self.s[self.tt]);
            Ok(())
        } else {
            Err("error")
        }
    }
}

fn main() {
    let mut s = Stack::new();
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines().map(|l| {
        l.unwrap()
    });

    if let Ok(n) = lines.next().unwrap().parse::<usize>() {
        for _ in 0..n {
            let line = lines.next().unwrap();
            let tokens: Vec<&str> = line.split_whitespace().collect();

            if let Some(op) = tokens.get(0) {
                match *op {
                    "push" => {
                        if let Ok(x) = tokens[1].parse::<i32>() {
                            s.push(x);
                        }
                    }
                    "pop" => {
                        if let Err(err) = s.pop() {
                            println!("{}", err);
                        }
                    }
                    "top" => {
                        if let Err(err) = s.top() {
                            println!("{}", err);
                        }
                    }
                    _ => (),
                }
            }
        }
    }
}

全部评论

相关推荐

牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务