Java基础课 | 排队去奶茶(队列)-程序员宅基地

技术标签: java  Java基础课-卡码网  开发语言  

Java基础课 | 排队去奶茶(队列)

Java基础


队列

概念

类似排队
在这里插入图片描述

特点

队列在队尾一侧插入(入队),在队头一侧删除(出队)。先进先出 FIFO(最先进入队列的元素将首先被移除)。

队列在计算机领域的应用:如

  • 网络通信中,请求和响应通常以队列的形式进行排队,以确保数据按照正确的顺序进行传输。
  • 不同进程可以通过消息队列来传递数据和消息。

双端队列

允许在队列的两端都能进行插入(添加元素)和删除(移除元素)操作,结合了队列(先进先出,FIFO)和栈(后进先出,LIFO)的特性。

操作

在Java中创建队列,首先导入

  • java.util.Queue:队列接口,定义了队列的基本操作
    然后选择具体的队列实现类
  • java.util.LinkedList:使用链表实现的队列,实现了Queue接口
  • java.util.ArrayDeque:使用数组实现的双端队列,也实现了Queue接口

LinkedList除了用于实现链表,也可以用于实现栈或队列。

  • 在队列两端进行添加和删除操作,用 ArrayDeque
  • 在队列中间频繁插入和删除元素,用LinkedList

队列的常用操作

  • isEmpty():判断队列是否为空
  • add():入队操作,将新的元素添加到队列的尾部
  • poll():出队操作,获取并移除队列的头部元素
  • peek():访问队列的头部元素,但不会将其移除
  • size():获取队列的长度,即队列中元素的数量

Queue 接口中的 add() 方法和 ArrayDequeaddLast() 都用于将指定的元素添加到队列的末尾,但addLast()做了异常处理,对于有界队列(就是长度限定的队列)来说,如果队列已经满了,再添加元素,add方法会抛出异常,而addLast不会抛出异常,但会返回false

当删除数据结构中的元素时,都应该考虑结构中元素是否已经为空的情况

题目


题目描述
假设有一家奶茶店,现在有一些人在排队等待取奶茶,同时也有人在取奶茶。 请你设计一个程序模拟这种情况下的奶茶队列管理。
假设每个人取奶茶的时间非常短,可以忽略不计,只需要考虑队列中的操作。
队列操作说明:
1、当操作为 1 时,表示有人已经取走奶茶,从队列中删除该人的信息。
2、当操作为 2 时,表示有新人加入排队,将该人的信息加入队列。
在一系列操作之后,你需要回答:下一个取奶茶的人是谁?

输入描述
第一行有一个整数 n,代表初始队列有 n 个人。
第二行有 n 个字符串,代表当前奶茶队列中的人。
第三行为一个整数 m,代表接下来将会有 m 次操作。
接下来一共有 m 行,代表共有 m 次操作。
如果是操作 1,那么该行只会有一个数字,代表有人取走了奶茶。
如果是操作 2,那么该行有一个数字和一个字符串,第一个数字 2 表示有人加入了奶茶队列,第二个字符串代表新加入的奶茶队列的人。

输出描述
输出只有一行,为下一个取奶茶的人。 如果已经没有去奶茶的人了,输出“There are no more people in the queue.”。

程序编写


import java.util.Queue;
import java.util.ArrayDeque;
import java.util.Scanner;

public class Main {
    
    public static void main (String[] args) {
    
        Scanner scanner = new Scanner(System.in);
        
        int n = scanner.nextInt();
        ArrayDeque<String> queue = new ArrayDeque();
        for (int i = 0; i < n; i++) {
    
            queue.add(scanner.next());
        }
        
        int m = scanner.nextInt();
        for (int i = 0; i < m; i++) {
    
            if (scanner.nextInt() == 1) {
    
                if (!queue.isEmpty()) {
    
                    queue.poll();
                } else {
    
                    continue;
                }
            } else {
    
                queue.add(scanner.next());
            }
        }
        
        if (!queue.isEmpty()){
    
            System.out.println(queue.peek());
        } else {
    
            System.out.println("There are no more people in the queue.");
        }
        scanner.close();
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44581505/article/details/136825560

智能推荐

【lssvm分类】基于算术算法优化最小二乘支持向量机AOA-LSSVM实现数据分类附matlab-程序员宅基地

文章浏览阅读44次。在机器学习领域,支持向量机(Support Vector Machines,SVM)是一种广泛应用的分类算法。然而,传统的SVM算法在处理大规模数据集时存在一些问题,如计算复杂度高和内存占用大等。为了解决这些问题,一种基于算术算法优化的最小二乘支持向量机(AOA-LSSVM)被提出。AOA-LSSVM是一种改进的支持向量机算法,它通过对算术算法进行优化,提高了算法的效率和性能。它采用了最小二乘支持向量机(LSSVM)的思想,通过优化算法的求解过程,使得算法在处理大规模数据集时更加高效。_aoa-lssvm

如何在 nuxt.js 中使用 axios.js 在组件和页面请求数据?_nuxt怎么引入axios-程序员宅基地

文章浏览阅读965次。创建了前端工程,接下来开始写代码。因为初始化项目,只是最小的一些基本依赖,再开发中,需要一些第三方的库来支持,比如样式/组件库。_nuxt怎么引入axios

mysql 配置 thread_MySQL:一个innodb_thread_concurrency设置不当引发的故障-程序员宅基地

文章浏览阅读631次。) at /home/install/lnmp1.5/src/mysql-5.6.40/sql/handler.cc:6717#8 0x00000000005aa206 in handler::multi_range_read_next (this=0x7fb9880e33a0, range_info=0x7fbb3c353400) at /home/install/lnmp1.5/src/my..._thread_concurrency为空

Ext JS 4前瞻:快速、易用和稳定-程序员宅基地

文章浏览阅读41次。很棒新特性:图表:Most people have used Ext JS 3’s Flash-based charting package. You’ll probably know that it’s good at the basics but is really hard to customize. For Ext JS 4.0 we’ve created a brand ne...

计算机网络复习第二章物理层知识点-程序员宅基地

文章浏览阅读858次,点赞20次,收藏20次。信道的频带宽度确定,而信噪比无法提高,那么码元传输速率也达到了上限值,这个时候可以通过编码让每一个码元携带更多比特的信息量,从而提高信息的传输速率。已调制信号到达接收端时,将经过调制器变换过的模拟信号去掉载波恢复成原来的基带数字信号。在使用时间域(简称为时域)的波形表示数字信号时,代表不同离散数值的基本波形。根据编码的不同,一个码元可以对应于几个比特,也可以是几个码元对应于一个比特。通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。指的是光的频分复用,使用一根光纤来同时传输多个光载波信号。

C语言中快排(快速排序)qsor总结_qsort函数受类型限制-程序员宅基地

文章浏览阅读1.4k次。以下是从网上多方面收集而来。 qsort函数是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分发写的,其时间复杂度为n*log(n),其结构为:void qsort(void *base,size_t nelem,size_t width,int (*Comp)(const void *,const void *));其中:*base 为_qsort函数受类型限制

随便推点

Docker安装Oracle 12c_docker安装oracle12c-程序员宅基地

文章浏览阅读3.3k次,点赞2次,收藏12次。Docker安装Oracle 12c_docker安装oracle12c

vulnhub:Y0USEF_vulnhub y0usef-程序员宅基地

文章浏览阅读829次,点赞2次,收藏2次。OSCP-4,主要利用方式:403请求绕过+文件上传绕过+RCE反弹shell 靶场: vulnhub.com 靶机名称: Y0USEF:1 难度: 中等_vulnhub y0usef

【C++ regex】C++正则表达式-程序员宅基地

文章浏览阅读1.5k次,点赞33次,收藏17次。正则表达式是一种强大的文本模式匹配工具,它在字符串处理中具有广泛的应用。C++11引入了标准库的 头文件,提供了内置的正则表达式支持,使得在C++中进行字符串匹配和处理变得更为便捷和高效。在本文中,我们将深入探讨C++中正则表达式的基础知识以及 库的使用方式。我们将介绍正则表达式的基本概念,然后逐步介绍C++中regex库的各种函数及其用法,并通过示例代码演示其实际应用。C++的 库为处理正则表达式提供了强大的工具。_c++ regex

ntp协议原理linux网络编程,NTP协议-程序员宅基地

文章浏览阅读368次。一:NTP的工作原理(UDP端口 123)NTP工作原理:上图是NTP的基本工作原理,路由器A和路由器B通过网络连接,它们都有自己独立的系统时钟,要实现各自的系统时钟的自动同步,作如下的假设:—路由器A和B的系统时钟同步之前,路由器A的时钟设定为10:00:00am,路由器B的时钟设定为11:00:00am。—以路由器B为NTP时间服务器,即路由器A将使自己的时钟与路由器B的时钟同步。—数据包在路..._linux ntp broadcast模式

linux指定内核版本升级,Ubuntu 14.0 升级内核到指定版本-程序员宅基地

文章浏览阅读347次。1、卸载现有内核sudo apt purge linux-headers-* linux-headers-*-generic linux-image-*-generic linux-image-extra-*-generic linux-signed-image-*-genericReplace * with the kernel versions (for instance :4.4.0-36..._sudo apt-get install linux-image-x linux-headers-x

二叉排序树插入相同值的处理_二叉排序树有相同数字怎么办-程序员宅基地

文章浏览阅读2w次,点赞21次,收藏43次。二叉排序树插入相同值的处理什么是二叉排序树二叉排序树建立(插入)出现相同值的处理什么是二叉排序树二叉排序树(Binary Sort Tree)或者是一颗空树;或者是具有下列性质的二叉树:(1)若左子树不为空,则左子树上所有结点的值均小于它的根节点的值(2)若右子树不为空,则右子树上所有结点的值均大于它的根节点的值(3)左右子树自己也是二叉排序树二叉排序树建立(插入)出现相同值的处理一..._二叉排序树有相同数字怎么办