牛客算法 AB1 【模板】栈

80 阅读1分钟

AB1 【模板】栈

请你实现一个栈。

操作:

  • push x:将 加𝑥 入栈,保证 𝑥为 int 型整数。
  • pop:输出栈顶,并让栈顶出栈
  • top:输出栈顶,栈顶不出栈

思路:通过内部类的方式创建一个栈类,该类有两个主要属性用于存储元素的数组以及指示栈顶元素的指针。其他的结构就参照栈的执行逻辑,因为已经提前知道输入均是合法的,因此没有对输入进行校验。 题目链接,ACM模式


import java.util.*;


public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int number = in.nextInt();
        //创建一个栈
        Main.Stack stack = new Main.Stack(number);
        while (number>=0) {
            String operator = in.nextLine();
            if(operator.startsWith("pop")) //判断是以什么操作数开始
                stack.pop();
            if(operator.startsWith("top"))
                stack.top();
            if(operator.startsWith("push")){
            //因为输入是push 数字,我们可以得知,数字位置从5开始
                String substring = operator.substring(5);
                //将String转换为int类型的数字
                int integer = Integer.parseInt(substring); 
                stack.push(integer);
            }
            number--;
        }
    }

    static class Stack{
        int [] array;
        int length = 0; // 始终指向待插入位置

        public Stack(int number) {
        //已知操作数的次数,设置数组长度与操作数相同,在极端情况下全是push操作也不会出现溢出的问题。
            this.array = new int[number]; 
        }

        public void push(int number){
            this.array[this.length] = number;
            this.length++;
        }

        public void pop(){
            if(this.length == 0)
                System.out.println("error");
            else{
                System.out.println(array[length-1]);
                this.length--;
            }
        }

        public void top(){
            if(this.length == 0)
                System.out.println("error");
            else{
                System.out.println(this.array[this.length-1]);
            }
        }
    }
}