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

Java中如何实现一个队列结构的函数?

发布时间:2023-09-22 11:58:11

在Java中,可以使用两种不同的方式实现一个队列结构的函数:使用数组或使用链表。

1. 使用数组实现队列结构的函数:

使用数组实现队列需要定义两个指针,一个指向队列的前端(front)和一个指向队列的后端(rear)。初始时,front和rear都指向数组的 个位置。

首先,需要定义一个队列类,包含以下成员变量:

- 一个整型数组用来存储队列的元素

- 一个整型变量表示队列的容量

- 一个整型变量表示队列的前端

- 一个整型变量表示队列的后端

队列类的构造函数用于初始化成员变量,实现如下:

public class Queue {
    private int[] queueArray;
    private int capacity;
    private int front;
    private int rear;

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

接下来,实现队列的操作方法:

- 入队操作enqueue:将元素插入队列的后端,并将后端指针后移一位

- 出队操作dequeue:返回队列的前端元素,并将前端指针后移一位

- 判空操作isEmpty:判断队列是否为空,即front是否等于rear

- 判满操作isFull:判断队列是否已满,即rear是否达到了队列的容量

下面是用数组实现队列结构的函数的完整代码:

public class Queue {
    private int[] queueArray;
    private int capacity;
    private int front;
    private int rear;

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

    public void enqueue(int data) {
        if (isFull()) {
            throw new IllegalStateException("Queue is full");
        }
        queueArray[rear] = data;
        rear++;
    }

    public int dequeue() {
        if (isEmpty()) {
            throw new NoSuchElementException("Queue is empty");
        }
        int data = queueArray[front];
        front++;
        return data;
    }

    public boolean isEmpty() {
        return front == rear;
    }

    public boolean isFull() {
        return rear == capacity;
    }
}

2. 使用链表实现队列结构的函数:

使用链表实现队列时,只需要定义一个指向队列头部的指针和一个指向队列尾部的指针。初始时,两个指针都指向空。

首先,创建一个节点类,用于保存队列的元素:

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

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

然后,创建一个队列类,包含以下成员变量:

- 一个指向队列的头部节点的指针

- 一个指向队列的尾部节点的指针

队列类的构造函数用于初始化成员变量,实现如下:

public class Queue {
    private Node front;
    private Node rear;

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

接下来,实现队列的操作方法:

- 入队操作enqueue:创建一个新的节点,并将其添加到队列的尾部

- 出队操作dequeue:返回队列的头部节点的数据,并将头部指针后移

- 判空操作isEmpty:判断队列是否为空,即front是否为空

- 判满操作isFull:链式队列在实现时没有容量限制,因此不需要实现isFull方法

下面是用链表实现队列结构的函数的完整代码:

public class Queue {
    private Node front;
    private Node rear;

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

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

    public int dequeue() {
        if (isEmpty()) {
            throw new NoSuchElementException("Queue is empty");
        }
        int data = front.data;
        front = front.next;
        return data;
    }

    public boolean isEmpty() {
        return front == null;
    }
}

以上是使用数组和链表两种方式实现队列结构的函数的代码。两种实现方式各有优劣,具体选择哪种方式取决于实际需求和对性能的要求。