蓝桥杯基础数据结构-队列(CLZ银行普通队列)

题目描述:
CLZ 银行只有两个接待窗口,VIPVIP 窗口和普通窗口,VIPVIP 用户进入 VIPVIP 窗口排队,剩下的进入普通窗口排队。现有 MM 次操作,操作有四种类型,如下:

IN name V:表示一名叫 name 的用户到 VIPVIP 窗口排队
OUT V:表示 VIPVIP 窗口队头的用户离开排队
IN name N:表示一名叫 name 的用户到普通窗口排队
OUT N:表示普通窗口队头的用户离开排队
求 MM 次操作结束后 VIPVIP 窗口队列和普通窗口队列中的姓名。

输入描述
第一行是一个整数 M(1\leq M \leq 1000)M(1≤M≤1000),表示一共有 MM 次操作。

第二行到第 M+1M+1 行输入操作,格式如下:

IN name V
OUT V
IN name N
OUT N

输出描述
输出 MM 次操作后 VIPVIP 窗口队列和普通窗口队列中的姓名(从头到尾),先输出 VIPVIP 窗口队列后输出普通窗口队列。

输入输出样例
示例 1

输入

5
IN xiaoming N
IN Adel V
IN laozhao N
OUT N
IN CLZ V
copy

输出

Adel
CLZ
laozhao

题目分析:1.由于有两种模式(vip和putong),所以需要建立连个队列,一个是vip,一个putong,由于首先输入一个数字开始换行操作,并且每行输入之后都会进行换行操作,所以我们需要进行换行操作(sc.nextLine())(进行吸收换行操作);
2.输入操作次数m之后会有m行的字符串输入,并且我们需要知道这行字符串中每段字符是什么,所以我们需要把字符串分割,并且把字符串分隔成数组之后提取出每段的字符进行比较;这里可以用到str[0].contains("V");
代码如下:

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Queue<String> vip = new LinkedList<>();
        Queue<String> putong = new LinkedList<>();
        int m = sc.nextInt();
        sc.nextLine();
        while(m-->0){
            String s = sc.nextLine();
            String[] str = s.split(" ");
            if(str[0].contains("IN")){
                if(str[2].contains("N")){
                    putong.offer(str[1]);
                }else{
                    vip.offer(str[1]);
                }
            }else{
                if(str[1].contains("N")){
                    putong.poll();
                }else{
                    vip.poll();
                }
            }
        }
        for(String s : vip){
            System.out.println(s);
        }
        for(String s : putong){
            System.out.println(s);
        }
    }
}

对于队列:
思考一下:

为什么链式存储的方式的队列首尾指针与链表头尾刚好相反,是什么原因呢?

其实我们知道链表的表头是用来插入数据的,表尾处的数据才是最先插入的,先入先出原则,所以表尾出的数据最先出列,也就是队列的头啦!听到这里,可能有人迷糊了,什么头什么尾的?链表是数据存储的组织方式,他只是决定了数据在内存中怎么存储,而队列是说我们是按照什么顺序存储。可以理解为一群人排队,队列告诉他们先来的先吃饭,后来的得排队,而链表或顺序表是说,你可以站着排队蹲着排队等等。
对于java 里面for (String str : s){}怎么理解

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值