📜  队列 | Set 1(介绍和数组实现)(1)

📅  最后修改于: 2023-12-03 15:42:23.374000             🧑  作者: Mango

队列 | Set 1(介绍和数组实现)

队列是计算机科学中的基本数据结构之一,它是一种先进先出(FIFO)的线性数据结构。

什么是队列?

队列可以看作是排队的人群,第一个排队的人第一个离开队列,其他人往前挪一位,等待自己的离开队列。在计算机科学中,队列中的数据项可以是任何类型,例如数字、字符串、对象等。

队列的操作

队列有两个基本的操作:Enqueue和Dequeue。

  • Enqueue操作:将新的数据项插入队列的末尾。
  • Dequeue操作:从队列的头部删除一个数据项。

队列还有其他一些常见的操作,例如IsEmpty(队列是否为空)和IsFull(队列是否已满),以及Peek(返回队列头部的元素而不删除它)。

队列的实现方式

队列可以使用不同的方法来实现,包括数组或链表等。

数组实现

使用数组实现的队列被称为数组队列。在数组队列中,数据项被存储在一个数组中,然后通过指针来指定队列头和队列尾。

public class ArrayQueue {
    private int front; //队列头指针
    private int rear; //队列尾指针
    private int capacity; //数组容量
    private int[] array; //存储数据的数组

    public ArrayQueue(int capacity) {
        this.capacity = capacity;
        front = -1;
        rear = -1;
        array = new int[capacity];
    }

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

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

    public void enqueue(int data) {
        if (isFull()) {
            System.out.println("队列已满,无法插入数据!");
            return;
        }

        if (isEmpty()) {
            front = 0;
            rear = 0;
        } else {
            rear = rear + 1; //队尾指针移动
        }

        array[rear] = data;
    }

    public int dequeue() {
        if (isEmpty()) {
            System.out.println("队列为空,无法删除数据!");
            return -1;
        }

        int data = array[front];

        if (front == rear) { //队列中只有一个元素
            front = -1;
            rear = -1;
        } else {
            front = front + 1; //队头指针移动
        }

        return data;
    }

    public int peek() {
        if (isEmpty()) {
            System.out.println("队列为空,无法取出数据!");
            return -1;
        }

        return array[front];
    }
}

以上是使用Java实现的数组队列示例代码。在这个例子中,为了方便,我们使用int类型的数据项和基本的数组实现方法。实际应用中,队列可以存储任何数据类型,并且可以使用不同的算法和数据结构来实现队列。