王元浩


私信TA

用户名:dotcpp0664606

访问量:2595

签 名:

等  级
排  名 477
经  验 4694
参赛次数 1
文章发表 40
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

数组模拟栈

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

了解栈顶的初始位置:=-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 人评分

  评论区

  • «
  • »