数组模拟环型队列

package com.scholar;

import java.util.Scanner;

/**

  • //@auther huhuho

  • //@date 2022/4/27 9:50
    */
    public class CircleArrayQueue {
    public static void main(String[] args) {
    CircleQueue queue = new CircleQueue(3);
    Scanner scanner = new Scanner(System.in);
    boolean loop = true;

     while(loop) {
         System.out.println("s(show): 显示队列");
         System.out.println("e(exit): 退出程序");
         System.out.println("a(add): 添加数据到队列");
         System.out.println("d(delete): 从队列取出数据");
         char key = scanner.next().charAt(0);
         int res;
         switch(key) {
             case 'a':
                 System.out.println("输出一个数");
                 int value = scanner.nextInt();
                 queue.add(value);
                 break;
             case 'e':
                 scanner.close();
                 loop = false;
                 break;
             case 'd':
                 try {
                     res = queue.delete();
                     System.out.printf("取出的数据是%d\n", res);
                 } catch (Exception var8) {
                     System.out.println(var8.getMessage());
                 }
                 break;
             case 's':
                 queue.show();
         }
     }
    
     System.out.println("程序退出~~");
    

    }
    }
    class CircleQueue {
    int maxsize;
    int front;
    int rear;
    int[] arr;
    public CircleQueue(int maxsize) {
    this.maxsize=maxsize;
    this.front=0;//指当前位置
    this.rear=0;//指最后位置的后一个位置
    this.arr=new int[this.maxsize];
    }
    public boolean isEmpty(){
    return frontrear;
    }
    public boolean isFull(){
    return (rear+1)%maxsize
    front;//有效值为maxsize-1,因为最后一个值存储指针,回到原先的front
    }
    public void add(int n){
    //如果队列满,
    if (isFull()){
    System.out.println(“队列满,不能添加数据”);
    }
    else {
    //因为当前rear指向后一个位置,所以直接赋值
    arr[rear]=n;
    //取模运算,进行环行队列
    rear=(rear+1)%maxsize;
    }

    }
    public int delete(){
    //如果队列为空会报异常,需要将异常抛出
    if (isEmpty()){
    throw new RuntimeException(“队列为空,不能删除数据”);
    }else {
    //front是当前位置,所以front要先保存到delete,在对front进行加1,并且要判断环行
    int delete=arr[front];
    front=(front+1)%maxsize;
    return delete;
    }

    }
    public void show(){
    //如果队列为空,输出这句话,将程序结束
    if (isEmpty()){
    System.out.println(“队列为空”);
    return;
    }
    //不为空,遍历输出,
    for (int i = front; i <front+(rear+maxsize-front)%maxsize; i++) {
    System.out.printf(“%d\n”,arr[i%maxsize]);
    }

    }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值