欢迎访问宙启技术站
智能推送

Java实现队列的数据结构以及相应方法

发布时间:2023-06-25 07:04:55

队列是一种线性数据结构,它遵循先进先出(FIFO)的原则,即先进入队列的元素先被处理,后进入队列的元素后被处理。队列在计算机科学中应用广泛,例如操作系统调度、网络数据传输等领域。在Java语言中,可以通过数组、链表等数据结构实现队列。

队列的基本操作包括入队、出队、获取队头元素、获取队列长度等。下面我们来实现一个基本的队列数据结构,包括以下方法:

1. 入队:将一个元素添加到队列尾部

2. 出队:移除队列中的 个元素

3. 获取队头元素:返回队列中的 个元素

4. 获取队列长度:返回队列中元素的个数

队列的实现可以使用数组或链表。在本文中,我们将使用链表实现队列。首先定义一个节点类Node:

class Node {
    int data;
    Node next;

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

节点类包含数据域data和指向下一个节点的next引用。Node类的构造方法用于创建一个节点对象,其中data用于存储节点的数据值,next初始值为null。

然后定义一个队列类Queue,该类包含以下属性和方法:

class Queue {
    private Node front;  // 队头指针
    private Node rear;   // 队尾指针
    private int size;    // 队列元素个数

    // 构造方法
    public Queue() {
        this.front = null;
        this.rear = null;
        this.size = 0;
    }

    // 入队
    public void enqueue(int data) {
        Node newNode = new Node(data);
        if (rear == null) {
            front = newNode;
            rear = newNode;
        } else {
            rear.next = newNode;
            rear = newNode;
        }
        size++;
    }

    // 出队
    public int dequeue() {
        if (front == null) {
            throw new NoSuchElementException("Queue is empty");
        }
        int data = front.data;
        front = front.next;
        if (front == null) {
            rear = null;
        }
        size--;
        return data;
    }

    // 获取队头元素
    public int peek() {
        if (front == null) {
            throw new NoSuchElementException("Queue is empty");
        }
        return front.data;
    }

    // 获取队列长度
    public int size() {
        return size;
    }
}

队列类Queue包含了队列的基本操作,包括入队enqueue、出队dequeue、获取队头元素peek、获取队列长度size。其中,front指针指向队头元素,rear指针指向队尾元素,size表示队列中元素的个数。在入队操作中,首先创建一个新节点newNode,如果队列为空,则front和rear指针均指向newNode;否则,将newNode添加到队列尾部,即将rear指针指向newNode。在出队操作中,首先判断队列是否为空,如果是则抛出异常;否则,取出队头元素,并将front指针指向下一个元素,如果取出元素后队列为空,则将rear指针也置为null。在获取队头元素和获取队列长度操作中,都需要判断队列是否为空,如果是则抛出异常。

使用上述Queue类实现队列的操作非常简单,下面提供一个示例:

public static void main(String[] args) {
    Queue q = new Queue();
    q.enqueue(1);
    q.enqueue(2);
    q.enqueue(3);
    q.enqueue(4);

    System.out.println(q.peek());    // 输出1
    System.out.println(q.size());    // 输出4

    System.out.println(q.dequeue()); // 输出1
    System.out.println(q.dequeue()); // 输出2

    System.out.println(q.peek());    // 输出3
    System.out.println(q.size());    // 输出2
}

在上述示例中,首先创建一个Queue对象q,并依次将元素1、2、3、4入队。然后分别调用peek()方法获取队头元素(输出1)和size()方法获取队列长度(输出4)。接着依次出队两个元素,即1、2,分别调用dequeue()方法并输出结果。最后再次调用peek()方法和size()方法输出队头元素和队列长度(输出3和2)。

总之,队列是一种基本的数据结构,它的应用非常广泛。在Java中,我们可以使用数组、链表等数据结构实现队列。通过本文中提供的Queue类,我们可以方便地使用队列的基本操作,包括入队、出队、获取队头元素、获取队列长度等。