数据结构队列及其Java代码实现

Posted 泡^泡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构队列及其Java代码实现相关的知识,希望对你有一定的参考价值。

什么是队列

队列是一种只允许在表的前端进行删除操作且在表的后端进行插入操作的线性表。其中,执行插入操作的端叫作队尾,执行删除操作的端叫作队头。没有元素的队列叫作空队列,在队列中插入一个队列元素叫作入队,从队列中删除一个队列元素叫作出队。因为队列只允许在队尾插入,在队头删除,所以最早进行队列的元素将最先从队列中删除,所以队列又叫作 先进先出(FIFO) 的线性表。

核心方法:

  • add():向队列的尾部加入一个元素(入队),先入队列的元素在最前边。
  • poll():删除队列头部的元素(出队)。
  • peek():取出队列头部的元素。

代码实现

package datastructure;

import java.util.Arrays;
import java.util.stream.Stream;

public class Queue<E> 
    private Object[] data = null;
    private int maxSize = 0;//队列的容量
    private int front;//队列头,允许删除
    private int rear;//队列尾,允许插入

    public Queue() 
        this(10);
    

    public Queue(int initialSize) 
        if(initialSize < 0)
            throw new RuntimeException("初始化大小不能小于0:"+initialSize);
        
        this.maxSize = initialSize;
        data = new Object[initialSize];
        front = rear = 0;
    

    /**
     * 向队列的尾部插入数据
     * @param e
     * @return
     */
    public boolean push(E e)
        if(rear == maxSize)
            throw new RuntimeException("队列已满,无法插入新的元素");
        
        data[rear++] = e;
        return true;
    

    /**
     * 删除队列头部的元素,出队
     * @return
     */
    public E poll()
        if(empty())
            throw new RuntimeException("空队列异常");
        
        E value = (E)data[front];
        data[front++] = null;
        return value;
    

    /**
     * 取出队列头部的元素,不删除
     * @return
     */
    public E peek()
        if(empty())
            throw new RuntimeException("空队列异常");
        
        return (E)data[front];
    

    public boolean empty()
        if(data == null)
            return false;
        
       return Stream.of(data).allMatch(p->null!=p);
    

    public static void main(String[] args) 
        Queue<Integer> queue = new Queue<>();
        queue.push(1);
        queue.push(2);
        queue.push(3);
        System.out.println("数组元素:"+ Arrays.toString(queue.data));
        System.out.println("删除队列头部数据:"+queue.poll());
        System.out.println("数组元素:"+ Arrays.toString(queue.data));
        System.out.println("查询队列头部数据:"+queue.peek());
        queue.push(4);
        System.out.println("数组元素:"+ Arrays.toString(queue.data));
    


执行结果:

以上是关于数据结构队列及其Java代码实现的主要内容,如果未能解决你的问题,请参考以下文章

Java数据结构及算法实战系列009:Java队列03——数组实现的阻塞队列ArrayBlockingQueue

Java数据结构及算法实战系列009:Java队列03——数组实现的阻塞队列ArrayBlockingQueue

数据结构之栈和队列及其Java实现

队列的简单理解

Java 剑指offer 用两个栈实现队列

循环队列的实现