首页 > 编程语言 >Java队列

Java队列

时间:2023-02-22 02:22:15浏览次数:36  
标签:Node head Java 队列 element last next

队列

队列性质

  • 队列(Queue)也是一种特殊的线性表

  • 在超市、食堂需要排队一样,我们总是排成一列,先到的人就排在前面,后来的人就排在后面,越前面的人越先完成任务,这就是队列,队列有队头和队尾:

image

秉承先来后到的原则,队列中的元素只能从队尾进入,只能从队首出去,也就是说,入队顺序为1、2、3、4,那么出队顺序也一定是1、2、3、4,所以队列是一种先进先出(FIFO,First In, First Out)的数据结构。

队列也可以使用链表和顺序表来实现,只不过使用链表的话就不需要关心容量之类的问题了,会更加灵活一些:

image

需要同时保存队首和队尾两个指针,因为是单链表,所以队首需要存放指向头结点的指针,因为需要的是前驱结点,而队尾则直接是指向尾结点的指针即可,后面只需要直接在后面拼接就行。


队列的属性

  • private final Node<E> head = new Node<>(null);队列头首位
  • 以下是一个队列节点
private static class Node<E> {
    E element;
    Node<E> next;

    public Node(E element) {
        this.element = element;
    }
}

队列的插入

  • 入队思路

image

  • 入队代码

    • Node<E> last = head;当一开始队列毫无元素时, 队首和队尾就是一样的
    • while (last.next != null)入队直接丢到最后一个结点的屁股后面就行了;当目前节点有值时就不断指向下一个
    • last.next = new Node<>(element);创建一个新节点, 插入队尾
public void offer(E element) {  //入队操作
    Node<E> last = head;
    while (last.next != null)   //入队直接丢到最后一个结点的屁股后面就行了
        last = last.next;
    last.next = new Node<>(element);
}

队列的出队

  • 出队思路

image

  • 出队代码

    • E e = head.next.element;因为队列的出队和入队都各有一个方向
public E poll() {   //出队操作
    if (head.next == null)   //如果队列已经没有元素了,那么肯定是没办法取的
        throw new NoSuchElementException("队列为空");
    E e = head.next.element;
    head.next = head.next.next;   //直接从队首取出
    return e;
}



总代码

  • Main代码

import ClassStudy.LinkQueue;

public class Main {
    public static void main(String[] args) {
        LinkQueue<String> stack = new LinkQueue<>();
        stack.offer("AA22");//队首
        stack.offer("BB31");
        stack.offer("CC22");//队尾
        System.out.println(stack.poll());
        System.out.println(stack.poll());
        System.out.println(stack.poll());
    }
}

  • LinkQueue类

package DataStructure;

import java.util.NoSuchElementException;

public class LinkQueue<E> {

    private final Node<E> head = new Node<>(null);

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

        public Node(E element) {
            this.element = element;
        }
    }


    public void offer(E element) {  //入队操作
        Node<E> last = head;
        while (last.next != null)   //入队直接丢到最后一个结点的屁股后面就行了
            last = last.next;
        last.next = new Node<>(element);
    }

    public E poll() {   //出队操作
        if (head.next == null)   //如果队列已经没有元素了,那么肯定是没办法取的
            throw new NoSuchElementException("队列为空");
        E e = head.next.element;
        head.next = head.next.next;   //直接从队首取出
        return e;
    }
}

标签:Node,head,Java,队列,element,last,next
From: https://www.cnblogs.com/WoOD-outPut/p/17143061.html

相关文章

  • Java栈
    栈栈性质栈(也叫堆栈,Stack)是一种特殊的线性表,它只能在在表尾进行插入和删除操作,就像下面这样:只能在一端进行插入和删除,当我们依次插入1、2、3、4这四个元素后,连续进......
  • JavaScript 数组遍历的五种方法(转)
    转自:JavaScript数组遍历的五种方法这篇文章主要介绍了JavaScript数组遍历的五种方法,帮助大家更好的理解和学习使用JavaScript,感兴趣的朋友可以了解下在使用JavaScri......
  • Java链表
    链表顺序表性质链表不同于顺序表,顺序表底层采用数组作为存储容器,需要分配一块连续且完整的内存空间进行使用,而链表则不需要,它通过一个指针来连接各个分散的结点,形成了......
  • IDEA+java swing+MySQL配置
    1、建立一个java项目(不是空项目)2、创建GUIForm(减少代码压力)生成代码出现了这个窗体此时说明swing已经可用了3、连接MySQL......
  • 在PHP和JavaScript中设置Cookie、会话存储(SessionStorage)和本地存储(LocalStorage)
    A.Cookie介绍Cookie:Cookie常用于识别用户,它是服务器留在用户计算机中的小文件(大小限制在4KB),每当相同的计算机通过浏览器请求页面时,它会同时发送Cookie,即Cookie是随HTTP......
  • Solon v2.1.4 发布。支持 java、kotlin、groovy!
    本次发布,重点测试和验证了在java、kotlin、groovy三种jvm语言里,开箱即用的特性。并发布SolonInitializr:https://solon.noear.org/start/(也即将发布idea插件)最......
  • JavaScript相关操作
    JQUERY--HTML标签属性操作$('#id').attr('attr_name','attr_value');//设置单一属性值$('#id').attr({'attr_name1':'attr_value1','attr_name2':'attr_value2'});//......
  • Java Web(八)JSP
    JSP一.入门1.概念JavaServerPages,Java服务端页面一种动态的网页技术,其中既可以定义HTML、JS、CSS等静态内容,还可以定义Java代码的动态内容JSP=HTML+Java2.快速入门导入......
  • java代码的运行
    1. 运行流程    编译后的class文件加载到虚拟机中,加载后的Java类会被存放于方法区,运行时执行方法区内的代码。               ......
  • Java代码工具之中英文语句分词
    在自然语言处理中比较热门的操作就是中文或英文语句分词了,分词就是按照不同的算法和参数将语句分成若干词汇。拆分后的关键词可以进行词频统计或者词云图片生成等,能够快速方......