“队列” 无罪,只是太美(Java篇)

这篇具有很好参考价值的文章主要介绍了“队列” 无罪,只是太美(Java篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇会加入个人的所谓‘鱼式疯言’

❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言
而是理解过并总结出来通俗易懂的大白话,
小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.
🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!

“队列” 无罪,只是太美(Java篇),数据结构的九曲回肠,数据结构,队列,java,开发语言

前言

在上一篇文章中我们讲解了可爱又有意思的 的学习 , 而在这篇文章中小编主要讲解 栈 的 “双胞胎兄弟” —————— 队列

小编在这里先留三个问题哈

什么是 队列

队列 的特点有什么呢 ?

今天讲的 队列 有我们异同呢 ?

目录

  1. 队列的初识
  2. Queue 类
  3. 队列的实现

一. 队列的初识

1. 队列的简介

队列:只允许在 一端进行插入数据操作,在另一端进行删除数据 操作的特殊线性表,队列具有先进先出FIFO(First In First Out)

入队列:进行插入操作的一端称为队尾(Tail/Rear)

出队列:进行删除操作的一端称为 队头(Head/Front)

“队列” 无罪,只是太美(Java篇),数据结构的九曲回肠,数据结构,队列,java,开发语言

二.Queue 类

“队列” 无罪,只是太美(Java篇),数据结构的九曲回肠,数据结构,队列,java,开发语言

在Java中, 我们的 队列 就是Java中的 Queue , 而Queue 是个接口,底层是通过 链表 实现的。

主要核心还是先入队的先出队先入先出

下面来具体使用一下我们 Queue 类吧 💖 💖 💖

1. 入队列

class Test2 {
    public static void main(String[] args) {
        Queue<Integer> q= new LinkedList<>();
        q.offer(1);
        q.offer(2);
        q.offer(3);
        q.offer(4);
    }
}

“队列” 无罪,只是太美(Java篇),数据结构的九曲回肠,数据结构,队列,java,开发语言

“队列” 无罪,只是太美(Java篇),数据结构的九曲回肠,数据结构,队列,java,开发语言

从中我们看到了先入的进入 队头 ,后入的进入 队尾

2. 出队列

class Test2 {
    public static void main(String[] args) {
        Queue<Integer> q= new LinkedList<>();
        q.offer(1);
        q.offer(2);
        q.offer(3);
        q.offer(4);

        System.out.println("=========入队列=========");
        System.out.println(q.poll());
        System.out.println(q.poll());
        System.out.println(q.poll());
        System.out.println(q.poll());
    }
}

“队列” 无罪,只是太美(Java篇),数据结构的九曲回肠,数据结构,队列,java,开发语言

“队列” 无罪,只是太美(Java篇),数据结构的九曲回肠,数据结构,队列,java,开发语言

我们看到了 对头 数据先出栈, 队尾 数据后出栈

鱼式疯言

故队列的特点是:

先入先出,后入后出

3. 查队列

class Test2 {
    public static void main(String[] args) {
        Queue<Integer> q= new LinkedList<>();
        q.offer(1);
        q.offer(2);
        q.offer(3);
        q.offer(4);

        System.out.println("=========出队列=========");
        System.out.println(q.poll());  // 1
        System.out.println(q.poll());  // 2


        System.out.println("=========获取对头元素========");
        System.out.println(q.peek());  // 3
        System.out.println(q.peek());  // 3
    }
}

“队列” 无罪,只是太美(Java篇),数据结构的九曲回肠,数据结构,队列,java,开发语言

这里的 查队列 指的是 查找出我们对头的 第一个数据

故当我们删除掉先前对头的 12 时,我们的对头的数据就变成了 3,所以显示 3

4. 获取队列大小和队列是否为空

class Test2 {
    public static void main(String[] args) {
        Queue<Integer> q= new LinkedList<>();
        q.offer(1);
        q.offer(2);
        q.offer(3);
        q.offer(4);

        System.out.println("=========出队列=========");
        System.out.println(q.poll());  // 1
        System.out.println(q.poll());  // 2


        System.out.println("=========获取对头元素========");
        System.out.println(q.peek());  // 3
        System.out.println(q.peek());  // 3


        System.out.println("======获取队列大小=======");
        System.out.println(q.size());

        System.out.println("=======判断队列是否为空=======");
        if (q.isEmpty()) {
            System.out.println("队列为空!");
        } else {
            System.out.println("队列不为空!");
        }
    }
}

“队列” 无罪,只是太美(Java篇),数据结构的九曲回肠,数据结构,队列,java,开发语言

是的,我们的队列是有着和 一样的 == size() == 和 ==empty()==一样的方法

但聪明的小爱就有疑惑了,居然使用方法是一样的,那么我们的实现这个方法的 底层 是不是一样的呢 ? ? ?

这个问题问的好,下面就让我们动手实践去试试呗,看看我们的方法在实现的原理上是否是一样的 !! !

三. 队列的实现

一样,我们的队列既可以选择顺序表也可以选择链表 ,但这次就不一样了,这次小编的建议是选择 链表

具体为啥,我们先看看框架吧 💥 💥 💥

1. 建立框架

public class MyQueue implements IQueue {

    List<Integer> queue;

    public MyQueue() {
        queue= new LinkedList<>();
    }
}

址所以用我们的链表来实现就是因为,链表对于删除头节点的那个数据的时间复杂度是 O(1)

而 顺序表 删除头数据的,由于要扭动数据,所以时间复杂度达到了 O(N)

故我们选择

 queue= new LinkedList<>();

这样 双向链表为框架进行实现

2. 入队列

“队列” 无罪,只是太美(Java篇),数据结构的九曲回肠,数据结构,队列,java,开发语言

@Override
public boolean offer(int val) {


    queue.add(val);

    return true;
}

“队列” 无罪,只是太美(Java篇),数据结构的九曲回肠,数据结构,队列,java,开发语言

这里我们入队列用到了 双向链表 的的 尾插 功能

具体链表的功能可以参考

单链表详解链接

3. 出队列

“队列” 无罪,只是太美(Java篇),数据结构的九曲回肠,数据结构,队列,java,开发语言


    @Override
    public int remove() {
        return queue.remove(0);
    }

“队列” 无罪,只是太美(Java篇),数据结构的九曲回肠,数据结构,队列,java,开发语言

这里我们 出队列 用到了 双向链表头删 功能

查队列

   @Override
    public int peek() {
        return queue.get(0);
    }

“队列” 无罪,只是太美(Java篇),数据结构的九曲回肠,数据结构,队列,java,开发语言

这里利用到 链表 的获取第一个元素的功能

4. 获取队列大小和是否为空

@Override
public int size() {
    return queue.size();
}


public boolean isEmpty() {
    return queue.isEmpty();
}

“队列” 无罪,只是太美(Java篇),数据结构的九曲回肠,数据结构,队列,java,开发语言

从中我们利用 链表的 size()isEmpty() 两个方法爱实现我们的队列

鱼式疯言

单链表也是可以实现我们的队列的

单链表详解链接

如果小伙伴们想熟悉 双向链表 的话,请移步小编的下一篇文章:== 双向链表== 哦 💖 💖 💖

总结

  • 队列的初识 : 我们初识了队列并熟悉了它的特点
  • Queue 类:明白了这个类下学会了使用我们队列的主要功能
  • 队列的实现: 在双向链表的搭配下,我们轻松的完成了队列的实现

可谓收获颇丰啊 💖 💖 💖 💖

如果觉得小编写的还不错的咱可支持 三连 下 (定有回访哦) , 不妥当的咱请评论区 指正

希望我的文章能给各位宝子们带来哪怕一点点的收获就是 小编创作 的最大 动力 💖 💖 💖

“队列” 无罪,只是太美(Java篇),数据结构的九曲回肠,数据结构,队列,java,开发语言文章来源地址https://www.toymoban.com/news/detail-847270.html

到了这里,关于“队列” 无罪,只是太美(Java篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构(Java实现)-栈和队列

    栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 先进后出 栈的使用 栈的模拟实现 上述的主要代码 改变元素的序列 将递归转化为循环 比如:逆序打印链表 结果如下 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表

    2024年02月10日
    浏览(41)
  • 【Java 数据结构】队列与OJ题

    篮球哥温馨提示:编程的同时不要忘记锻炼哦! 目录 1、什么是队列?  2、初识Queue 2.1 认识一下Queue 2.2 简单使用下Queue 3、模拟实现Queue 3.1 构造方法和成员属性 3.2 offer 方法 3.3 poll 方法 3.4  peek 方法 4、队列相关的OJ题 4.1 设计循环队列 (来源:LeetCode 难度:中等)   4.2 用队列

    2024年01月22日
    浏览(39)
  • Java 数据结构之队列(Queue)详解

    目录 1、在Java中有哪些常见的队列? 2、Queue 接口分析 3、Deque 接口分析 4、PriorityQueue 的实现原理详解 5、使用Java数组实现队列的简单示例 1、在Java中有哪些常见的队列?         在Java中,有一些常见的队列实现。下面是其中一些的列举: //队列也是一种线性的数据结构

    2024年02月15日
    浏览(39)
  • 数据结构——Java实现栈和队列

    (1)栈是一种线性数据结构 (2)规定只能从栈顶添加元素,从栈顶取出元素 (3)是一种先进后出的数据结构(Last First Out)LIFO Java中可以直接调用方法来实现栈 如何自己写代码来实现栈呢? 先定义一个接口,方便后边进行调用 接下来来实现栈的方法,调用接口,完善方法

    2024年01月20日
    浏览(41)
  • Java 数据结构篇-用链表、数组实现队列(数组实现:循环队列)

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍   文章目录         1.0 队列的说明         1.1 队列的几种常用操作         2.0 使用链表实现队列说明         2.1 链表实现队列         2.2 链表实现队列 - 入栈操作         2.3 链表实现队

    2024年02月05日
    浏览(38)
  • Java------数据结构之栈与队列(简单讲解)

    本篇碎碎念 :时隔n个月,继续写博客,假期落下的进度,在开学后努力追赶, 假期不努力,开学徒伤悲啊,此时此刻真想对自己说一句,活该啊~~~~ 欠下的链表练习题讲解会在下次更新~~~~ 今日份励志文案:  万物皆有裂痕,那是光照进来的地方 栈:一种特殊的线性表,其只允

    2024年04月14日
    浏览(57)
  • 【Java数据结构】顺序表、队列、栈、链表、哈希表

    是一个有类型参数(type parameter)的范型表(generic class) 能够自动调整容量,并且不需要写额外的代码 存放数据使用数组但是可以编写一些额外的操作来强化为线性表,底层依然采用顺序存储实现的线性表,称为顺序表 创建 常见操作 一旦确认数组列表大小恒定,不再发生

    2024年02月02日
    浏览(41)
  • Java 数据结构之栈、队列(头歌平台,详细注释)

    目录 第1关:实现基于数组的 任务描述 相关知识 栈 栈的数组表示 Java 泛型简介 泛型方法 泛型类应用场景示例 代码:  第2关:实现基于链表的栈 任务描述 相关知识 栈的链式存储 入栈 出栈 代码:  第3关:基于数组的队列 任务描述 相关知识 队列 队列的数组实现 循环队列

    2024年04月25日
    浏览(41)
  • Java 【数据结构】 栈(Stack)和队列(Queue)【神装】

      登神长阶  第三神装 S tack    第四神装 Queue    目录 🔋一.栈 Stack 💻1.概念 🖥️2.基本操作  🖨️3.相关OJ题   🖱️4.栈、虚拟机栈和栈帧的区别 🪫二.队列 Queue 🖲️1.概念 💽2.基本操作 🔌三.总结与反思         在 Java 中,栈(Stack)是一种后进先出(LIFO)的数

    2024年04月27日
    浏览(33)
  • Java 数据结构篇-用数组、堆实现优先级队列

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍    文章目录         1.0 优先级队列说明         2.0 用数组实现优先级队列         3.0 无序数组实现优先级队列         3.1 无序数组实现优先级队列 - 入队列 offer(E value)         3.2 无序数组实现优先

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包