java数据结构——队列

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yoonerloop/article/details/82390968

 

队列是一种可以实现“先进先出”的数据结构,属于线性表的一种。它具有如下特点:

  1. 队列中的数据元素遵循“先进先出”的原则,简称FIFO结构。

  2. 在队尾添加元素,在队头删除元素。

以下连篇文章将分别介绍队列的数组实现、链表实现,双端队列、环形队列、优先队列。

一、数组实现队列

注意:队尾、队头指的是元素的位置,而不是元素的值,位置具有唯一性,值可能重复

1、构造方法

class ArrayQueue {
    //队头
    private int front;
    //队尾
    private int end;
    //队列有效长度
    private int elements;
    //队列
    private long[] queue;

    public ArrayQueue() {
        queue = new long[5];
        front = -1;
        end = -1;
    }

    public ArrayQueue(int length) {
        queue = new long[length];
        front = -1;
        end = -1;
    }
}

2、添加队列

    /**
     * 添加队列
     */
    public void add(long value) {
        if (isFull()){
            System.out.println("队列已满,请删除");
            throw new IndexOutOfBoundsException();
        }
        if (isEmpty()){
            front = 0;
        }
        queue[++end] = value;
        elements++;
    }

3、删除队列

    /**
     * 删除队列
     */
    public long delete() {
        long value = queue[front];
        elements--;
        front++;
        return value;
    }

4、查看队头

    /**
     * 查看队头
     */
    public long getFront() {
        if (isEmpty()) {
            System.out.println("队尾为空");
            return  0;
        }
        return queue[front];
    }

5、查看队尾

    /**
     * 查看队尾
     */
    public long getEnd() {
        if (isEmpty()) {
            return -1;
        }
        return queue[end];
    }

6、查看队列元素个数

    /**
     * 查看队列里面几个元素
     */
    public int size() {
        return elements;
    }

7、队列是否为空

    /**
     * 队列是否为空
     */
    public boolean isEmpty(){
        return elements == 0;
    }

8、队列是否满了

    /**
     * 队列是否满了
     */
    public boolean isFull(){
        return end == queue.length;
    }

二、链表实现队列

1、引入单向链表

地址:https://blog.csdn.net/yoonerloop/article/details/81489665

2、构造方法

class LinkedListQueue {

    private SingleLinkedList listQueue;

    public LinkedListQueue() {
        listQueue = new SingleLinkedList();
    }
}

3、添加队列

    /**
     * 插入元素
     */
    public void add(String data) {
        listQueue.insert(data);
    }

4、删除队列

    /**
     * 删除元素
     */
    public String delete(){
        return listQueue.deleteHead().data;
    }

5、查看队列

    /**
     * 查看队列
     */
    public void display() {
        listQueue.display();
    }

6、查看对头

    /**
     * 获取队头
     */
    public String getFront() {
        return listQueue.getHead().data;
    }

7、查看队尾

    /**
     * 获取队尾
     */
    public String getEnd() {
        return listQueue.getTail().data;
    }

8、获取队列长度

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

9、队列是否为空

    /**
     * 队列是否为空
     */
    public boolean isEmpty() {
        return listQueue.isEmpty();
    }

下一篇将介绍双端队列。

 

 

 

猜你喜欢

转载自blog.csdn.net/yoonerloop/article/details/82390968