基础数据结构——队列(链表实现)

队列的性质

  • 先进先出(FIFO - First In First Out):最先加入队列的元素最先被移出
  • 后进后出(后来的元素排在队尾)
  • 只允许在队尾插入元素,在队首删除元素
  • 具有先来先服务的特点

链表实现队列

和之前创建链表相同,我们需要设置一个哨兵头结点 此时它既是head也是tail

后面进行添加操作的之后将每次新加的节点设置为tail,并且指向head

我们接下来实现队列的基本操作

先来写队列类和它内部Node类

java 复制代码
public class LinkedListQueue <E>implements Queue<E>, Iterable<E>{
    Node<E> head=new Node<>(null,null);//头指针一直指向哨兵节点
    Node<E> tail=head;
    int size=0;
    int capacity=Integer.MAX_VALUE;
    {
        tail.next=head;
    }

    private static class Node<E>{
        E value;
        Node<E> next;

      public Node(E value, Node<E> next) {
          this.value = value;
          this.next = next;
    }
}

    public LinkedListQueue(int capacity) {
        this.capacity = capacity;
    }

    public LinkedListQueue() {

}

我们在这个类中将每次构造的队列对象的tail节点都指向head节点

接下来我们实现各个功能操作

代码如下

java 复制代码
public boolean offer(E value) {
        if(isFull()){
            return false;
        }
        Node<E> added=new Node<>(value,head);
        tail.next=added;
        tail=added;
        size++;
        return true;
    }

    @Override
    public E poll() {
        if (isEmpty()){
            return null;
        }
        Node<E> first=head.next;
        head.next=first.next;
        size--;
        return first.value;
    }

    @Override
    public E peek() {
        if(isEmpty()){
            return null;
        }
        return head.next.value;
    }

    @Override
    public boolean isEmpty() {
        return head==tail;
    }

    @Override
    public boolean isFull() {
        return size==capacity;
    }
}
相关推荐
Mr Xu_12 小时前
告别硬编码:前端项目中配置驱动的实战优化指南
前端·javascript·数据结构
czxyvX12 小时前
017-AVL树(C++实现)
开发语言·数据结构·c++
数智工坊12 小时前
【数据结构-队列】3.2 队列的顺序-链式实现-双端队列
数据结构
elseif12312 小时前
【C++】并查集&家谱树
开发语言·数据结构·c++·算法·图论
徐小夕@趣谈前端12 小时前
Web文档的“Office时刻“:jitword共建版2.0发布!让浏览器变成本地生产力
前端·数据结构·vue.js·算法·开源·编辑器·es6
Nebula_g13 小时前
线程进阶: 无人机自动防空平台开发教程(更新)
java·开发语言·数据结构·学习·算法·无人机
xuxie9914 小时前
day 23 树
数据结构
EnglishJun15 小时前
数据结构的学习(四)---栈和队列
数据结构·学习
数智工坊16 小时前
【数据结构-特殊矩阵】3.5 特殊矩阵-压缩存储
数据结构·线性代数·矩阵
芝士爱知识a16 小时前
AlphaGBM 深度解析:下一代基于 AI 与蒙特卡洛的智能期权分析平台
数据结构·人工智能·python·股票·alphagbm·ai 驱动的智能期权分析·期权