数组模拟队列java

1.队列基本规则

1.先进先出,后进后出

2.用数组表示就是顺序存储,用链表表示就是链式存储

2创建队列

import javax.management.RuntimeMBeanException;

/**
 * @author li
 *
 *使用数组模拟队列
 */

public class ArrQueue {
    private int maxSize;//表示数组最大容量
    private int front;//队列头
    private int rear;//队列尾
    private int[] arr;//模拟队列
    
    /*
     * 构造器,规定队列大小
     */
    public ArrQueue(int arrMaxSize) {
        maxSize=arrMaxSize;
        arr=new int[maxSize];


        //指向队列头的前一个位置,即数组下标0的位置,并不指向队列的数据
        front=-1;


        //指向队列尾部最后一个数据
        rear=-1;
    }


    /*
     * 1.判断队列是否为空
     */
    public boolean ifNull() {
        return rear==front;
    }
    
    /*
     * 判断队列是否已满
     */
    public boolean ifFull() {
        return rear==maxSize-1;
    }
     
    /*
     * 添加数据到队列
     */
    public void addQueue(int n) {
        //首先判断队列是否已满
        if(ifFull()) {
            System.out.println("队列已满,不能加入数据");
            return;
        }
        rear++;//rear后移
        arr[rear]=n;//数据入队
      
    }
    
    /*
     * 取数据,出队列
     */
    public int getQueue() {
        //首先判断队列是否为空
        if(ifNull()) {
            //如果队列为空,手动抛出异常
            //throw new RuntimeException("队列为空");
            System.out.println("队列为空");
        }
        front++;
        return arr[front];
    }
    
    /*
     * 显示队列的所有数据
     */
    public void showQueue() {
        //遍历之前判断队列是否为空
        if(ifNull()) {
            System.out.println("队列为空,不能显示");
            return;
        }
        //正式遍历
        for(int i=0;i<arr.length;i++) {
            System.out.printf("arr[%d]=%d",i,arr[i]);
            //throw new RuntimeException("队列为空");
        }
    }
    /*
     * 显示列表的头数据
     */
    
    public int showHeadQueue() {
        //遍历之前判断队列是否为空
        if(ifNull()) {
            //throw new RuntimeException("队列为空");    
            System.out.println("队列为空");
        }
        return arr[front+1];
    }    

}

3.测试类

package queue;

import java.util.Scanner;

/**
 * @author li
 *
 */
public class texxt {

    public static void main(String[] args) {
       //创建数组
        ArrQueue arrQueue=new ArrQueue(3);
        Scanner scanner=new Scanner(System.in);
        boolean loop=true;
        int flog;
        /*
         * 循环打印菜单,依据输入指令调用相应方法
         */
        while(loop) {
            System.out.println("显示队列请输入1:");
            System.out.println("添加数据进队列请输入2:");
            System.out.println("从队列取出数据请输入3:");
            System.out.println("显示队列头数据请输入4:");
            System.out.println("退出请输入5:");
            flog=scanner.nextInt();
            switch(flog) {
            case 1:
                arrQueue.showQueue();
                break;
            case 2:
                System.out.println("输入数据:");
                int data=scanner.nextInt();
                arrQueue.addQueue(data);
                break;
            case 3:
                System.out.println(arrQueue.getQueue());
                break;
            case 4:
                System.out.println(arrQueue.showHeadQueue());
                break;
            case 5:
                scanner.close();
                loop=false;
                break;
            default:
                break;
            }
        }
        System.out.println("退出成功");
    }
}

4.效果展示

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我有一计,,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值