JAVA—通过数组模拟队列

@JAVA—通过数组模拟队列

前言

与之前的一样,不用判断队列满的可以先不写队列的大小。
练习指路☞AcWing

一、创建队列

1.队列头
2.队列尾
3.队列大小
4.数组用于存储数据

注意队头和队尾的初始值,添加数据是队尾移动,输出时注意队头的数据

class arrayQueues {
    int size;//大小
    int front;//队列头
    int rear;//队列尾
    int[] arr;//存放数据

    //创建队列的构造器
    public arrayQueues(int arrMaxSize) {
        size = arrMaxSize;
        arr = new int[size];
        front = -1;//只想队列头部,指向队列列头的前一个位置时,初始值为-1
        rear = -1;//指向队列尾部,是指向队列尾部的数据(即队列的最后一个数据)
    }
}

二、队列调用的方法

2.1注意点

  1. 遍历队列时,最好用for循环,而不是增强for,这里设置了队列的大小,增强for回输出未添加新数据时的默认值。
  2. 但队头等于队尾时,队为空。

2.2 代码

 //判断队列是否为满
    //队尾指向size-1时为满,注意初始值为-1,从0开始计数
    public boolean isFull() {
        return rear == size - 1;
    }

    //判断是否为空
    public String isEmpty() {
        if(rear==front){
            return "YES";
        }
        else{
            return "NO";
        }
    }

    //添加数据到队列
    public void add(int data) {
        if (isFull()) {
            System.out.println("队列满,无法加入新数据");
            return;
        } else {
            rear++;
            arr[rear] = data;
        }
    }

    //从队头弹出一个数
    public void pop() {
        if (isEmpty()=="YES") {
            System.out.println("队列空,没有数据可以弹出");
            return;
        } else {
            front++;
            int res=arr[front];
//            System.out.println("从队头弹出一个数"+arr[front+1]);
        }
    }

    //查询队头元素
    public void showFront() {
        if (isEmpty().equals("Yes")) {
//            System.out.println("队列空,没有数据可以弹出");
            return;
        } else {
            //不论是一次都没有取出头数据还是已经取出后的数据都不能使用,应该输出front+1的数据
            System.out.println(arr[front+1]);
        }
    }


    //遍历数据
    public void show() {
        if (isEmpty()=="YES") {
            System.out.println("队列空,没有数据可以弹出");
            return;
        }
        for (int i=front+1;i<=rear;i++){
            System.out.println(arr[i]);
        }
    }

三、整体代码

import java.util.Scanner;

/**
 *  用数组模拟队列
 */
public class arraysQueue {
    static int N=100001;
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int M = scanner.nextInt();
        String commend;
        arrayQueues aq=new arrayQueues(N);
        while (M-- > 0) {
            commend = scanner.next();
            switch (commend) {
                case "push":
                    int x = scanner.nextInt();
                    aq.add(x);
                    break;
                case "pop":
                    aq.pop();
                    break;
                case  "empty":
                    String result= aq.isEmpty();
                    System.out.println(result);
                    break;
                case "query":
                    aq.showFront();
                    break;

            }

        }
    }
}


class arrayQueues {
    int size;//大小
    int front;//队列头
    int rear;//队列尾
    int[] arr;//存放数据

    //创建队列的构造器
    public arrayQueues(int arrMaxSize) {
        size = arrMaxSize;
        arr = new int[size];
        front = -1;//只想队列头部,指向队列列头的前一个位置时,初始值为-1
        rear = -1;//指向队列尾部,是指向队列尾部的数据(即队列的最后一个数据)
    }

    //判断队列是否为满
    //队尾指向size-1时为满,注意初始值为-1,从0开始计数
    public boolean isFull() {
        return rear == size - 1;
    }

    //判断是否为空
    public String isEmpty() {
        if(rear==front){
            return "YES";
        }
        else{
            return "NO";
        }
    }

    //添加数据到队列
    public void add(int data) {
        if (isFull()) {
            System.out.println("队列满,无法加入新数据");
            return;
        } else {
            rear++;
            arr[rear] = data;
        }
    }

    //从队头弹出一个数
    public void pop() {
        if (isEmpty()=="YES") {
            System.out.println("队列空,没有数据可以弹出");
            return;
        } else {
            front++;
            int res=arr[front];
//            System.out.println("从队头弹出一个数"+arr[front+1]);
        }
    }

    //查询队头元素
    public void showFront() {
        if (isEmpty().equals("Yes")) {
//            System.out.println("队列空,没有数据可以弹出");
            return;
        } else {
            //不论是一次都没有取出头数据还是已经取出后的数据都不能使用,应该输出front+1的数据
            System.out.println(arr[front+1]);
        }
    }


    //遍历数据
    public void show() {
        if (isEmpty()=="YES") {
            System.out.println("队列空,没有数据可以弹出");
            return;
        }
        for (int i=front+1;i<=rear;i++){
            System.out.println(arr[i]);
        }
    }

}




你可能感兴趣的:(数据结构,java,开发语言,算法)