『牛客|每日一题』模板栈

150 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

👨‍🎓作者简介:一位喜欢写作,计科专业大二菜鸟

🏡个人主页:starry陆离

🕒首发日期:2022年7月13日星期三

🌌上期文章:『首期文章』

📚订阅专栏:『牛客刷题集锦』

🍁每日推荐:基础算法无论在研究生面试还是求职面试都是十分重要的一环,这里推荐一款算法面试神器:牛客网-面试神器;算法题只有多刷勤刷才能保持思路与手感,大家赶紧行动起来吧(温馨提示:常见的面试问答题库也很nice哦) 在这里插入图片描述

如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦

『牛客|数据结构|栈』模板栈

1.每日一题:AB1 【模板】栈

原题链接:传送门-》戳我戳我

image-20220725205339093

2.测试示例

输入:

 6
 push 1
 pop
 top
 push 2
 push 3
 pop

输出:

 1
 error
 3

3.Stack类实现

先来个简单的用Java自带的Stack类来实现,这样我们就只需要处理输入和判空即可

 import java.util.*;
 public class Main {
     public static void main(String[] args) {
         Scanner scanner = new Scanner(System.in);
         int n = scanner.nextInt();
         scanner.nextLine();
         String string;
         Stack<Integer> stack = new Stack<Integer>();
         while (n-- != 0) {
             string = scanner.nextLine();
             String cmp = string.substring(0, 3);
             if (cmp.equals("pus")) {
                 int a = Integer.valueOf(string.substring(5, string.length()));
                 stack.push(a);
             } else if (cmp.equals("pop")) {
                 if (!stack.isEmpty()) {
                     System.out.println(stack.pop());
                 } else {
                     System.out.println("error");
                 }
             } else if (cmp.equals("top")) {
                 if (!stack.isEmpty()) {
                     System.out.println(stack.peek());
                 } else {
                     System.out.println("error");
                 }
             }
 ​
         }
     }
 }

4.数组实现栈

用自带的类写没挑战性???那就来自己写一个MyStack类用数组实现栈

 ​
 import java.util.*;
 public class Main{
     public static void main(String[] args){
         Scanner scanner=new Scanner(System.in);
         int n=scanner.nextInt();
         scanner.nextLine();
         String string;
         MyStack stack=new MyStack(n+1);
         while(n--!=0){
             string=scanner.nextLine();
             String cmp=string.substring(0,3);
             if(cmp.equals("pus")){
                 int a=Integer.valueOf(string.substring(5,6));
                 stack.push(a);
             }else if(cmp.equals("pop")){
                 stack.pop();
             }else if(cmp.equals("top")){
                 stack.peek();
             }
         }
         scanner.close();
     }
 }
 ​
 class MyStack{
     int[] data;//用数组实现栈
     int maxSize;//栈的容量
     int top=-1;//栈顶指针-栈中元素个数
     
     //构造函数
     public MyStack(int maxSize) {
         this.maxSize=maxSize;//预先指定栈大小
         this.data=new int[maxSize];//初始化栈空间
     }
     //入栈
     public void push(int val) {
         if(this.top==this.maxSize) {//栈满-栈中的元素个数等于栈的容量
             System.out.println("error");
         }else {
             //栈没满,移动栈顶指针,加入新元素
             data[++this.top]=val;
         }
     }
     //出栈操作
     public void pop() {
         //栈空-栈中的元素为0
         if(this.isEmpty()) {
             System.out.println("error");
         }else {
             //栈不空,打印栈顶元素,栈顶指针下移
             System.out.println(data[this.top--]);
         }
     }
     //打印栈顶元素
     public void peek() {
         //栈空-栈中的元素为0
         if(this.isEmpty()) {
             System.out.println("error");
         }else {
             //栈不空,打印栈顶元素
             System.out.println(data[this.top]);
         }
     }
     
     //栈的判空
     public boolean isEmpty() {
         if(this.top==-1) {
             return true;
         }else {
             return false;
         }
     }
 }

image-20220712235640440

🍁每日推荐:基础算法无论在研究生面试还是求职面试都是十分重要的一环,这里推荐一款算法面试神器:牛客网-面试神器;算法题只有多刷勤刷才能保持思路与手感,大家赶紧行动起来吧(温馨提示:常见的面试问答题库也很nice哦) 在这里插入图片描述

如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦