Rumah >Java >javaTutorial >Cara membetulkan: Ralat struktur data Java: Limpahan baris gilir

Cara membetulkan: Ralat struktur data Java: Limpahan baris gilir

王林
王林asal
2023-08-18 19:49:43908semak imbas

Cara membetulkan: Ralat struktur data Java: Limpahan baris gilir

Cara menyelesaikan: Ralat struktur data Java: limpahan baris gilir

Pengenalan:

Dalam proses pengaturcaraan dan pembangunan menggunakan Java, kita sering menghadapi pelbagai ralat dan pengecualian. Salah satu masalah biasa ialah ralat struktur data, terutamanya limpahan baris gilir. Artikel ini memperincikan cara menyelesaikan masalah ini dan menyediakan contoh kod yang berkaitan.

  1. Apakah ralat limpahan baris gilir?

Baris gilir ialah struktur data biasa yang mengikut prinsip masuk dahulu keluar (FIFO). Dalam baris gilir, kita boleh memasukkan elemen pada satu hujung dan memadam elemen pada hujung yang lain. Ralat limpahan baris gilir berlaku apabila kami memasukkan elemen ke dalam baris gilir yang penuh.

Ralat limpahan baris gilir biasanya disebabkan oleh situasi berikut:

  • Menggunakan tatasusunan bersaiz tetap sebagai pelaksanaan asas baris gilir, adalah mustahil untuk terus memasukkan elemen apabila baris gilir penuh.
  • Menggunakan senarai terpaut sebagai pelaksanaan asas baris gilir, apabila memori tidak mencukupi atau tidak diperuntukkan dengan betul, elemen tidak boleh diteruskan untuk dimasukkan. . Jika baris gilir penuh, elemen baharu tidak boleh dimasukkan, tetapi pengecualian harus dilemparkan atau mesej ralat harus dicetak.
Berikut ialah contoh kod untuk baris gilir mudah yang dilaksanakan menggunakan tatasusunan:
    public class Queue {
        private int[] data;
        private int front, rear, size;
    
        public Queue(int capacity) {
            data = new int[capacity];
            front = rear = size = 0;
        }
    
        public void enqueue(int element) {
            if (size == data.length) {
                throw new IllegalStateException("Queue is full");
            }
    
            data[rear] = element;
            rear = (rear + 1) % data.length;
            size++;
        }
    }
  1. 2.2 Meluaskan Baris
Jika baris gilir penuh, kita boleh mengembangkan saiz baris gilir. Secara khusus, kita boleh mencipta tatasusunan baharu dan menyalin elemen dalam tatasusunan asal ke tatasusunan baharu. Kami kemudian menggunakan tatasusunan baharu sebagai pelaksanaan asas baris gilir dan mengemas kini penunjuk dan saiz baris gilir.

Berikut ialah contoh kod untuk mengembangkan baris gilir:

public class Queue {
    private int[] data;
    private int front, rear, size;

    public Queue(int capacity) {
        data = new int[capacity];
        front = rear = size = 0;
    }

    public void enqueue(int element) {
        if (size == data.length) {
            resize();
        }

        data[rear] = element;
        rear = (rear + 1) % data.length;
        size++;
    }

    private void resize() {
        int[] newData = new int[data.length * 2];
        for (int i = 0; i < data.length; i++) {
            newData[i] = data[(front + i) % data.length];
        }
        data = newData;
        front = 0;
        rear = size;
    }
}

2.3 Gunakan senarai pautan dinamik untuk melaksanakan baris gilir

Penyelesaian lain ialah menggunakan senarai pautan dinamik untuk melaksanakan baris gilir. Berbanding dengan tatasusunan bersaiz tetap, senarai terpaut boleh menambah dan mengalih keluar elemen secara fleksibel, jadi ralat limpahan baris gilir tidak berlaku.

Berikut ialah contoh kod untuk baris gilir yang dilaksanakan menggunakan senarai terpaut:

public class Queue {
    private class Node {
        int data;
        Node next;

        Node(int data) {
            this.data = data;
            this.next = null;
        }
    }

    private Node front, rear;
    private int size;

    public Queue() {
        front = rear = null;
        size = 0;
    }

    public void enqueue(int element) {
        Node newNode = new Node(element);
        if (isEmpty()) {
            front = rear = newNode;
        } else {
            rear.next = newNode;
            rear = newNode;
        }
        size++;
    }
}

Ringkasan:

Ralat limpahan baris gilir adalah salah satu masalah biasa dalam pengaturcaraan Java. Artikel ini menerangkan cara menyemak sama ada baris gilir penuh dan menyediakan dua kaedah untuk menyelesaikan ralat limpahan baris gilir: mengembangkan baris gilir dan menggunakan senarai terpaut untuk melaksanakan baris gilir. Saya harap artikel ini akan membantu dalam menyelesaikan ralat struktur data Java: masalah limpahan baris gilir.

Atas ialah kandungan terperinci Cara membetulkan: Ralat struktur data Java: Limpahan baris gilir. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn