Java之队列

1. 概念

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性
特点队列具有先进先出FIFO(First In First Out)
入队列:进行插入操作的一端称为队尾(Tail/Rear)
出队列:进行删除操作的一端称为队头(Head/Front)
在这里插入图片描述

2. 队列的使用

在Java中,Queue是个接口,底层是通过链表实现的。

注意:Queue是个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口。
比如:Queue<Integer> q = new LinkedList<>();

在这里插入图片描述
Java中队列提供的一些使用方法如下:

方法功能
boolean offer(E e)入队列
E poll()出队列
peek()获取队头元素
int size()获取队列中有效元素个数
boolean isEmpty()检测队列是否为空

3. 模拟实现队列

我们可以使用双向链表来模拟实现队列

1. 首先创建一个内部类 ,定义节点,并采用构造方法初始化

static class QueNode{
public QueNode prev;
public QueNode next;
int val;
public QueNode(int val) {
this.val = val;
}
}

2. 定义两个引用分别指向队头和队尾

public QueNode front;
public QueNode rear;

3. 相关方法的实现

public class MyQueue {

    static class QueNode{
        public QueNode prev;
        public QueNode next;
        int val;
        public QueNode(int val) {
            this.val = val;
        }
    }

    public QueNode front;
    public QueNode rear;


    //入队尾


    public void offer(int data){
        QueNode queNode=new QueNode(data);
        if(front==null){
            front=rear=queNode;
        }else {
            rear.next=queNode;
            queNode.prev=rear;
            rear=queNode;
        }
    }

    //队头出数据
  
    public void poll(){
        int data=0;
        if(front==null){
        }else {
            data=front.val;
            front=front.next;
            front.prev=null;
            if(front==null){
                rear=null;
            }
        }
        return data;
    }

    // 求队长

    public int size(){
        if(front==null){
            return 0;
        }
        QueNode cur=front;
        int size=0;
        while (cur!=null){
            size++;
            cur=cur.next;
        }
        return size;
    }

    //取队头元素

    public int peek(){
        if(front==null){
            return -1;
        }
        return front.val;
    }
    //队列的打印
    public void display(){
        if(front==null){
            return ;
        }
        QueNode cur=front;
        while (cur!=null){
            System.out.print(cur.val+" ");
            cur=cur.next;
        }
        System.out.println();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值