La implementación del código de la cola circular

Cola circular

1. Comprensión básica de la cola circular

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

2. Realización concreta

  • Implementar cola circular con matriz
2.1 Únete al equipo
  • Ideas:
  1. También juzga si está lleno
  2. El elemento agregado se agrega a la posición de la parte posterior, y luego la parte posterior se mueve hacia la parte posterior. Originalmente, solo necesita agregarse, pero es una cola circular. El siguiente de los últimos es el subíndice 0, por lo que el se utiliza la operación de módulo;
//入队
    public boolean enQueue(int value) {
    
    
        //1.先判断是否为满
        if(isFull()){
    
    
            return false;
        }
        this.elem[rear] = value;
        rear = (rear+1)%this.elem.length;
        return true;
    }

2.2 Salida
  • Ideas:
  1. Primero determina si está vacío
  2. Fuera directamente desde el frente del equipo;
public boolean deQueue() {
    
    
        //1.判断是否为空
        if(isEmpty()){
    
    
            return false;
        }
        front = (front+1)%elem.length;
        return true;
    }

2.3 Obtener el elemento principal
  • Idea: Debido a que se implementa con una matriz, simplemente devuelva el elemento del subíndice head directamente;
public int Front() {
    
    
        //1.判断是否为空
        if(isEmpty()){
    
    
            return -1;
        }
        return elem[front];
    }
2.4 Obtener elementos de cola
  • Idea: Si la parte trasera vuelve a la anterior en la posición 0, se requiere módulo aritmético, se puede restar directamente;
//获取队尾
    public int Rear() {
    
    
        //1.判断是否为空
        if(isEmpty()){
    
    
            return -1;
        }
        int index = this.rear==0 ? this.elem.length-1 :  this.rear-1;
        return elem[index];
    }
2.5 Determine si está vacío
  • Idea: siempre que la parte trasera == delantera esté vacía
//是否为空
    public boolean isEmpty() {
    
    
        if(rear == front){
    
    
            return true;
        }
        return false;
    }
2.6 Determine si está lleno
  • Idea: Simplemente juzgue si la siguiente parte trasera es el elemento principal;
public boolean isFull() {
    
    
        if((rear+1)%elem.length == front){
    
    
            return true;
        }
        return false;
    }

3. Código completo

//循环队列(用数组实现)
class MyCircularQueue {
    
    
    public int[] elem;
    public int front;//队头
    public int rear;//队尾

    /** Initialize your data structure here. Set the size of the queue to be k. */
    //构造方法
    public MyCircularQueue(int k) {
    
    
        this.elem = new int[k+1];
    }

    /** Insert an element into the circular queue. Return true if the operation is successful. */
    //入队
    public boolean enQueue(int value) {
    
    
        //1.先判断是否为满
        if(isFull()){
    
    
            return false;
        }
        this.elem[rear] = value;
        rear = (rear+1)%this.elem.length;
        return true;
    }

    /** Delete an element from the circular queue. Return true if the operation is successful. */
    //出队
    public boolean deQueue() {
    
    
        //1.判断是否为空
        if(isEmpty()){
    
    
            return false;
        }
        front = (front+1)%elem.length;
        return true;
    }

    /** Get the front item from the queue. */
    //获取队头元素
    public int Front() {
    
    
        //1.判断是否为空
        if(isEmpty()){
    
    
            return -1;
        }
        return elem[front];
    }

    /** Get the last item from the queue. */
    //获取队尾
    public int Rear() {
    
    
        //1.判断是否为空
        if(isEmpty()){
    
    
            return -1;
        }
        int index = this.rear==0 ? this.elem.length-1 :  this.rear-1;
        return elem[index];
    }

    /** Checks whether the circular queue is empty or not. */
    //是否为空
    public boolean isEmpty() {
    
    
        if(rear == front){
    
    
            return true;
        }
        return false;
    }

    /** Checks whether the circular queue is full or not. */
    //是否为满
    public boolean isFull() {
    
    
        if((rear+1)%elem.length == front){
    
    
            return true;
        }
        return false;
    }
}

public class TestDemo4 {
    
    
    public static void main(String[] args) {
    
    
        MyCircularQueue myCircularQueue = new MyCircularQueue(8);
        myCircularQueue.enQueue(1);
        myCircularQueue.enQueue(2);
        myCircularQueue.enQueue(3);
        myCircularQueue.enQueue(4);
        System.out.println(myCircularQueue.Front());
        System.out.println(myCircularQueue.Rear());
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_45665172/article/details/110208588
Recomendado
Clasificación