Estructura de datos - cola (aplicación Java)

Estructura de datos - cola (aplicación Java)

Descripción del blog

La información en el artículo de que a través de Internet y organizar conclusión personal, lo que significa que la experiencia de aprendizaje individual y resumen, ¿y si la infracción, póngase en contacto conmigo para borrar, gracias!

breve introducción

Una cola es una forma lineal especial, es especial en que sólo permite su eliminación en el extremo delantero de la mesa (delantera), mientras que el extremo posterior de la inserción, la mesa (trasera), y la pila como una cola por el operativo tabla de restricciones lineal. Conocido como el extremo de cola del extremo, operación de eliminación se conoce como operación de cabeza de inserción .

Una cola es una lista ordenada, se puede utilizar una matriz o una lista enlazada de conseguir, sigue la FIFO principio

cola de gama

diagrama

Aquí Insertar imagen Descripción

pensar

1, frente, verdadero valor inicial de -1 y el valor máximo MaxSize

2, las condiciones de la columna de aire: trasero = frente

3, una condición llena cola: verdadero = MaxSize-1

la implementación del código

package queue;

import com.sun.source.tree.BreakTree;

import java.util.Iterator;
import java.util.Scanner;

public class ArrayQueue {
    public static void main(String[] args) {
        //创建一个对象
        Array queue = new Array(3);
        char key = ' ';
        Scanner scanner = new Scanner(System.in);
        boolean loop = true;
        while (loop){
            System.out.println("请输入字符操作");
            System.out.println("输入s:显示队列");
            System.out.println("输入a:添加数据");
            System.out.println("输入g:取出数据");
            System.out.println("输入h:查看队列头");
            System.out.println("输入e:退出程序");
            key = scanner.next().charAt(0); //接收一个字符
            switch (key){
                case 's':
                    queue.showQueue();
                    break;
                case 'a':
                    System.out.println("请输入一个数");
                    int value = scanner.nextInt();
                    queue.addQueue(value);
                    break;
                case 'g':
                    try {
                        int res = queue.getQueue();
                        System.out.printf("取出的数据是%d\n",res);
                    }catch (Exception e){
                        System.out.println(e.getMessage());
                    }
                    break;
                case 'h':
                    try {
                        int res = queue.headQueue();
                        System.out.printf("队列头的数据是%d\n",res);
                    }catch (Exception e){
                        System.out.println(e.getMessage());
                    }
                    break;
                case 'e':
                    scanner.close();
                    loop = false;
                    break;
                default:
                    break;
            }
        }
        System.out.println("程序退出");
    }
}

//使用数组模拟队列
class Array{
    private int maxSize; //表示最大的容量
    private int front;  //对列头
    private int rear;   //队列尾
    private int[] arr;    //存放数据

    //创建队列的构造器
    public Array(int arrMaxSize){
        maxSize = arrMaxSize;
        arr = new int[maxSize];
        front = -1;  //指向队列头
        rear = -1;   //指向队列尾
    }

    //判断队列是否满了
    public boolean isFull(){
        return rear == maxSize - 1;
    }

    //判断队列是否为空
    public boolean isEmpty(){
        return rear == front;
    }

    //添加数据到队列
    public void addQueue(int n){
        if (isFull()){
            System.out.println("队列满了,不能加数据了");
            return;
        }
        rear++;  //rear后移
        arr[rear] = n;
    }

    //获取队列的数据
    public int getQueue(){
        if (isEmpty()){
            throw new RuntimeException("队列为空,不能取数据");
        }
        front++;  //front后移
        return arr[front];
    }

    //显示队列的所有数据
    public void showQueue(){
        //遍历
        if (isEmpty()){
            throw new RuntimeException("队列为空,不能取数据");
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.printf("arr[%d]=%d\n",i,arr[i]);
        }
    }

    //显示队列的头数据
    public int headQueue(){
        if (isEmpty()){
            throw new RuntimeException("队列为空,不能取数据");
        }
        return arr[front + 1];
    }
}

prueba

[Fotos de cadenas extranjeras vertido falla, la estación de origen puede tener mecanismo de cadena de seguridad, se recomienda guardar la imagen abajo subido directamente (img-VHiKUAIr-1584705260920) (/ Users / tanglei / Library / Application Support / typora-user-images / imagen-20200320195326718 .png)]

Tenga en cuenta que es necesario agregar datos se accede años.

defecto

Array sólo puede utilizarse una vez

formación anular analógica utilizando una matriz

diagrama

Aquí Insertar imagen Descripción

pensar

1, el valor inicial de la fuente es 0, el primer elemento es la cola

2, valor inicial real es 0, el elemento a un último elemento de la cola, (una posición Desocupado como convención voluntad)

3, las condiciones para la columna completa: (real 1) mod MaxSize = frente

4, las condiciones de cola vacía: verdadero = frente

5, el número de colas de datos válidos: (real + MaxSize adelantado) mod MaxSize

código

package queue;

import java.util.Scanner;

public class CricleArrayQueue {
    public static void main(String[] args) {
        //创建一个对象
        CricleArray queue = new CricleArray(4);  //有效数据为3
        char key = ' ';
        Scanner scanner = new Scanner(System.in);
        boolean loop = true;
        while (loop){
            System.out.println("请输入字符操作");
            System.out.println("输入s:显示队列");
            System.out.println("输入a:添加数据");
            System.out.println("输入g:取出数据");
            System.out.println("输入h:查看队列头");
            System.out.println("输入e:退出程序");
            key = scanner.next().charAt(0); //接收一个字符
            switch (key){
                case 's':
                    queue.showQueue();
                    break;
                case 'a':
                    System.out.println("请输入一个数");
                    int value = scanner.nextInt();
                    queue.addQueue(value);
                    break;
                case 'g':
                    try {
                        int res = queue.getQueue();
                        System.out.printf("取出的数据是%d\n",res);
                    }catch (Exception e){
                        System.out.println(e.getMessage());
                    }
                    break;
                case 'h':
                    try {
                        int res = queue.headQueue();
                        System.out.printf("队列头的数据是%d\n",res);
                    }catch (Exception e){
                        System.out.println(e.getMessage());
                    }
                    break;
                case 'e':
                    scanner.close();
                    loop = false;
                    break;
                default:
                    break;
            }
        }
        System.out.println("程序退出");
    }
}

//使用数组模拟环形队列
class CricleArray{
    private int maxSize; //表示最大的容量
    private int front;  //对列头
    private int rear;   //队列尾
    private int[] arr;    //存放数据

    //创建队列的构造器
    public CricleArray(int arrMaxSize){
        maxSize = arrMaxSize;
        arr = new int[maxSize];
    }

    //判断队列是否满了
    public boolean isFull(){
        return (rear + 1) % maxSize == front;
    }

    //判断队列是否为空
    public boolean isEmpty(){
        return rear == front;
    }

    //添加数据到队列
    public void addQueue(int n){
        if (isFull()){
            System.out.println("队列满了,不能加数据了");
            return;
        }
        arr[rear] = n;
        rear = (rear + 1) % maxSize;  //rear后移
    }

    //获取队列的数据
    public int getQueue(){
        if (isEmpty()){
            throw new RuntimeException("队列为空,不能取数据");
        }
        int value = arr[front];
        front = (front + 1) % maxSize;//front后移
        return value;
    }

    //显示队列的所有数据
    public void showQueue(){
        //遍历
        if (isEmpty()){
            System.out.println("");
            throw new RuntimeException("");
        }
        for (int i = front; i < front+size(); i++) {
            System.out.printf("arr[%d]=%d\n",i % maxSize,arr[i % maxSize]);  //格式化输出
        }
    }

    //求出当前队列有效数据的个数
    public int size(){
        return (rear + maxSize -front) % maxSize;
    }

    //显示队列的头数据
    public int headQueue(){
        if (isEmpty()){
            throw new RuntimeException("队列为空,不能取数据");
        }
        return arr[front];
    }
}


prueba

Aquí Insertar imagen Descripción

gracias

Enciclopedia de Baidu

universal Network

Y un trabajador posee

Publicados 171 artículos originales · ganado elogios 414 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/qq_45163122/article/details/104997271
Recomendado
Clasificación