03 File d'attente de la structure des données et de l'algorithme (1)

Présentation de la file d'attente

  • Une file d'attente est une liste ordonnée, qui peut être implémentée sous forme de tableau ou de liste liée.
  • Suivez la règle du premier entré, premier sorti, c'est-à-dire que les données qui entrent en premier dans la file d'attente doivent être retirées en premier. Ce que vous déposez plus tard doit être retiré plus tard.

File d'attente de simulation de baie

  • Comme indiqué ci-dessous
    Insérez la description de l'image ici
  • Étant donné que la sortie et l'entrée de la file d'attente sont traitées séparément des extrémités avant et arrière, deux variables avant et arrière sont nécessaires pour enregistrer respectivement les indices des extrémités avant et arrière de la file d'attente. L'avant changera avec la sortie des données et l'arrière changera avec l'entrée des données.
  • Le problème fatal est que lorsque back = maxSize-1, peu importe où se trouve le front, le programme rappellera "la file d'attente est pleine"

Code

import java.util.Scanner;

class ArrayQueueDemo{
    
    
    public static void main(String[] args){
    
    
        ArrayQueue arrayQueue = new ArrayQueue(3);
        Scanner scanner = new Scanner(System.in);
        char key = ' ';
        boolean loop = true;
        while(loop){
    
    
            System.out.println("s(show)");
            System.out.println("a(add)");
            System.out.println("g(get)");
            System.out.println("e(exit)");
            System.out.println("h(head)");
            key = scanner.next().charAt(0);  //接受字符
            switch(key){
    
    
                case 's':
                    arrayQueue.showQueue();
                    break;
                case 'a':
                    System.out.println("请输入一个数");
                    try {
    
    
                        int temp1 = scanner.nextInt();
                        arrayQueue.addQueue(temp1);
                    }catch(Exception e){
    
    
                        e.printStackTrace();
                    }
                    break;
                case 'g':
                    try{
    
    
                        System.out.println(arrayQueue.getQueue());
                    }catch(Exception e){
    
    
                        e.printStackTrace();
                    }
                    break;
                case 'e':
                    loop = false;
                    break;
                case 'h':
                    System.out.println(arrayQueue.headQueue());
                    break;
                default:
                    break;
            }
        }
        System.out.println("退出程序");
    }
}

//模拟队列
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 isEmpty(){
    
    
        return rear == front;
    }

    //数据入队
    public void addQueue(int n){
    
    
        if(isFull()){
    
    
            System.out.println("队列满");
            return;
        }
        rear++;
        arr[rear] = n;
    }

    //数据出队
    public int getQueue(){
    
    
        if(isEmpty()){
    
    
            throw new RuntimeException("队列空");
        }
        front++;
        return arr[front];
    }

    //获取队首元素
    public int headQueue(){
    
    
        if(isEmpty()){
    
    
            throw new RuntimeException("队列空");
        }
        return arr[front+1];
    }

    //展示队列
    public void showQueue(){
    
    
        if(isEmpty()){
    
    
            System.out.println("队列空");
            return;
        }
        for(int i = front + 1; i <= rear; i++){
    
    
            System.out.printf("%d\t", arr[i]);
        }
        System.out.println();
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/qq_37054755/article/details/110879714
conseillé
Classement