解题思路:

数组模拟栈

了解栈是一个什么结构:先进后出的线性结构表

了解栈顶的初始位置:=-1

当栈满时的条件是:栈顶等于数组容量减一

当栈空的条件是:栈顶位置为-1

处理好当空栈时的异常

栈和队列区别:一个是先进后出,一个是先进先出;栈对头指针具有很少的感知



注意事项:

参考代码:

import java.util.Scanner;

public class Stack {
   public static void main(String[] args) {
       Scanner scanner=new Scanner(System.in);

       String key="";
       boolean loop=true;
       int n=scanner.nextInt();
       while (n!=0){
           ArrayStack stack=new ArrayStack(n);
           for (int i=1;i<=n;i++){


           key=scanner.next();
           switch (key){
               //显示栈顶数
               case "A":
                   try {
                       int data=stack.getPop();
                       System.out.printf("%d\n",data);
                   }catch (Exception e){
                       System.out.println(  e.getMessage());

                   }
                   break;

                   //入栈
               case "P":
                   int data1=scanner.nextInt();
                   stack.push(data1);
                   break;
                   //出栈
               case"O":
                   try {
                       stack.pop();
                   }catch (Exception e){
                       System.out.println(e.getMessage());

                   }
                   break;
           }
           }
           System.out.println();
           n=scanner.nextInt();
       }

   }
}
class ArrayStack{
   private int maxSize;
   private int [] stack;
   private int pop=-1;

   public ArrayStack(int maxSize) {
       this.maxSize = maxSize;
       stack=new int [maxSize];
   }
   //判断空栈
   public boolean isEmpty(){
       return pop==-1;
   }
   //判断栈满
   public boolean isFull(){
       return pop==maxSize-1;
   }
   //入栈
   public void push(int value){

       //先判断是否满了
       if (isFull()){
           System.out.println("栈满,加不进去数据");
           return;
       }
       pop++;
       stack[pop]=value;
   }
   //弹栈
   public int pop(){
       //先判断是否空
       if (isEmpty()){
           throw new RuntimeException("");
       }
       int value=stack[pop];
       pop--;
       return value;
   }
   //查询栈顶数据
   public int getPop(){
       if (isEmpty()){
           throw new RuntimeException("E");
       }
       return stack[pop];
   }
}

点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论