数组模拟队列java

发布时间:2024年01月19日

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.效果展示

文章来源:https://blog.csdn.net/2301_78058031/article/details/135637449
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。