使用数组实现大小固定的栈和队列

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-16 23:40   11   0

实现栈的基本操作和返回最小值

public static class ArrayStack{
  private int index = 0;
  private int[] arr;
  private int[] help;
  
  public ArrayStack(int size){
   if(size<1){
    return;
   }
   arr = new int[size];
   help = new int[size];
  }
  
  
  public void add(int num){
   if(index==arr.length){
    throw new ArrayIndexOutOfBoundsException();
   }
   help[index] = index==0? num :Math.min(num, help[index-1]);
   arr[index++] = num;
     
  }
  
  public int remove(){
   if(index==0){
    throw new ArrayIndexOutOfBoundsException();
   }
   
   return arr[--index];
  }
  
  public int get(int i){
   if(i>=index){
    throw new ArrayIndexOutOfBoundsException();
   }
   
   return arr[index-(index-i)];
  }
  
  public int peek(){
   if(index==0){
    throw new ArrayIndexOutOfBoundsException();
   }
   return arr[--index];
  }
  //返回最小值
  public int getMin(){
   if(index==0){
    throw new ArrayIndexOutOfBoundsException("getMin");
   }
   return help[--index];
  }
 }

实现队列的基本操作

public static class ArrayQueue{
  private int index = 0;
  private int size = 0;
  private int end = 0;
  private int[] arr;
  
  
  public ArrayQueue(int s){
   if(s<1){
    throw new ArrayIndexOutOfBoundsException();
   }
   arr = new int[s];
  }
  
  public int peek(){
   if(size==0){
    throw new ArrayIndexOutOfBoundsException();
   }
   
   return arr[index];
  }
  
  
  
  public void add(int num){
   if(size==arr.length){
    throw new ArrayIndexOutOfBoundsException();
   }
   size++;
   arr[end] = num;
   end = end==arr.length-1? 0:end+1;
  }
  
  public int remove(){
   if(size==0){
    throw new ArrayIndexOutOfBoundsException();
   }
   size--;
   int t = index;
   index = index==arr.length-1?0:index+1;
   return arr[t];
  }
 }

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP