Java 实现 数组 模拟 队列

效果图

在这里插入图片描述

思路分析

cust.aowei.queue

ArrayQueueDemo.java
  • 使用数组模拟队列
    • 编写ArrayQueue类
    • maxSize 表示数组最大容量
    • front 队列头
    • rear 队列尾
    • arr 用于存放数据的数组,模拟队列
  • 创建队列的构造器
    • front=-1;指向队列头部,分析出front是指向队列头的前一个位置
    • rear=-1;指向队列尾,指向队列尾的数据(队列最后一个数据
  • 判断队列是否满
    • rear=maxSize -1;
  • 判断队列是否为空
    • rear = front;
  • 添加数据到队列
    • 判断队列是否满
    • rear后移
  • 获取队列数据,出队列
    • 判断是否为空
    • front后移
  • 显示队列所有数据

具体实现代码

package cust.aowei.queue;

import java.util.Scanner;

/**
 * @author aoxiaobao
 * @project DataStruct
 * @date 2019/10/3 - 11:08
 */
public class ArrayQueueDemo {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("数组模拟队列");
        ArrayQueue arrayQueue = null;
        System.out.print("输入队列长短:");
        int size = in.nextInt();
        arrayQueue = new ArrayQueue(size);

        while(true){
            System.out.println("1:显示队列");
            System.out.println("2:添加数据");
            System.out.println("3:取出数据");
            System.out.println("0:退出程序");

            int input = in.nextInt();
            switch(input){
                case 1:
                    arrayQueue.showQueue();
                    break;
                case 2:
                    System.out.print("输入数据:");
                    int d = in.nextInt();
                    arrayQueue.addQueue(d);
                    break;
                case 3:
                    arrayQueue.getQueue();
                    break;
                case 0:
                    System.exit(0);
                    break;
            }
        }
    }
}
class ArrayQueue{
    private int maxSize;//表示数组最大容量
    private int front;//队列头
    private int rear;//队列尾
    private int [] arr;//用于存放数据的数组,模拟队列

    //创建队列的构造器
    public ArrayQueue(int maxSize){
        this.maxSize = maxSize;
        front = -1;
        rear = -1;
        arr = new int[maxSize];
    }
    //判断队列是否满
    public boolean isFull(){
        return rear == maxSize - 1;
    }
    //判断队列是否为空
    public boolean iSNull(){
        return rear == front;
    }
    //添加数据到队列
    public void addQueue(int i){
        if(this.isFull()){
            System.out.println("队列已满");
            return;
        }else{
            rear++;
            arr[rear]=i;
        }
    }
    //获取队列数据,出队列
    public void getQueue(){
        if(this.iSNull()){
            System.out.println("队列为空");
            return;
        }else{
            front++;
            System.out.println(arr[front]);
        }
    }
    //显示队列所有数据
    public void showQueue(){
        if(this.iSNull()){
            System.out.println("队列为空");
            return;
        }else{
            System.out.println("显示队列");
            for (int i =front+1;i<rear+1;i++){
                System.out.print(arr[i]+"\t");
            }
        }
        System.out.println();
    }
}

模拟 环形队列 的代码实现

package cust.aowei.queue;

import java.util.Scanner;

/**
 * @author aoxiaobao
 * @project DataStruct
 * @date 2019/10/3 - 18:38
 */
public class CircleQueueDemo {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("数组模拟环形队列");
        CircleQueue circleQueue = null;
        System.out.print("输入队列长短:");
        int size = in.nextInt();
        circleQueue = new CircleQueue(size);

        while(true){
            System.out.println("1:显示队列");
            System.out.println("2:添加数据");
            System.out.println("3:取出数据");
            System.out.println("0:退出程序");

            int input = in.nextInt();
            switch(input){
                case 1:
                    circleQueue.showQueue();
                    break;
                case 2:
                    System.out.print("输入数据:");
                    int d = in.nextInt();
                    circleQueue.addQueue(d);
                    break;
                case 3:
                    circleQueue.getQueue();
                    break;
                case 0:
                    System.exit(0);
                    break;
            }
        }
    }
}
class CircleQueue{
    private int maxSize;//表示数组最大容量
    private int front;//队列头
    private int rear;//队列尾
    private int [] arr;//用于存放数据的数组,模拟队列

    //创建队列的构造器
    public CircleQueue(int maxSize){
        this.maxSize = maxSize+1;
        front =0;
        rear = 0;
        arr = new int[maxSize+1];
    }
    //判断队列是否满
    public boolean isFull(){
        return (rear+1) % maxSize == front;
    }
    //判断队列是否为空
    public boolean iSNull(){
        return rear == front;
    }
    //添加数据到队列
    public void addQueue(int i){
        if(this.isFull()){
            System.out.println("队列已满");
            return;
        }else{
            arr[rear]=i;
            rear = (rear + 1) % maxSize;
        }
    }
    //获取队列数据,出队列
    public void getQueue(){
        if(this.iSNull()){
            System.out.println("队列为空");
            return;
        }else{
            System.out.println(arr[front]);
            front = (front +1) % maxSize;
        }
    }
    //显示队列所有数据
    public void showQueue(){
        if(this.iSNull()){
            System.out.println("队列为空");
            return;
        }else{
            System.out.println("显示队列");
            for (int i =front;i<front+this.size();i++){
                System.out.print(i%maxSize+"   "+arr[i%maxSize]+"\t");
            }
        }
        System.out.println();
    }
    public int size(){
        return (rear + maxSize - front) % maxSize;
    }
}

在这里插入图片描述

发布了117 篇原创文章 · 获赞 222 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_43901693/article/details/101991737