You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java队列作业咨询:单队列内按红、蓝、黄顺序排序的实现方法

单队列实现票证按颜色优先级排序

要在仅使用一个队列的前提下,实现red优先、blue次之、yellow最后的排序,可以利用队列的**先进先出(FIFO)**特性,通过两次遍历队列完成排序:

具体步骤

  1. 第一次遍历队列:将所有非red的票移动到队列尾部,直到队列中所有red票都集中在队首
  2. 第二次遍历队列:在剩余的非red票中,将所有非blue的票移动到队列尾部,此时队列前半部分是red,中间是blue,最后是yellow

修改后的代码

import java.util.LinkedList;
import java.util.Queue;
import java.util.Random;

public class TestQueueTwo {

    public static void main(String[] args) {

        Random random = new Random();
        String color = " ";
        String ticket;
        int listSize = 5;
        int attendants = 2;

        String[] colors = {"red", "blue", "yellow"};

        Queue<String> tickets = new LinkedList<>();

        // 生成随机票证入队
        while(tickets.size() < listSize)
        {
            color = colors[random.nextInt(3)];
            ticket = color + (random.nextInt(listSize) + 1);
            tickets.add(ticket);
        }

        // 第一步:把所有red票移到队首
        int originalSize = tickets.size();
        for (int i = 0; i < originalSize; i++) {
            String current = tickets.poll();
            if (current.startsWith("red")) {
                tickets.add(current);
            } else {
                // 非red票先移到队尾
                tickets.add(current);
            }
        }
        // 统计red票的数量,确定第二次遍历的起始位置
        int redCount = 0;
        for (String t : tickets) {
            if (t.startsWith("red")) {
                redCount++;
            } else {
                break;
            }
        }

        // 第二步:处理剩余的非red票,把blue移到red之后
        for (int i = 0; i < originalSize - redCount; i++) {
            String current = tickets.poll();
            if (current.startsWith("blue")) {
                tickets.add(current);
            } else {
                tickets.add(current);
            }
        }

        // 输出排序后的队列
        System.out.println("排序后的票证队列:");
        while (!tickets.isEmpty()) {
            System.out.print(tickets.poll() + " ");
        }
    }
}

代码说明

  • 第一次遍历:循环次数等于队列初始长度,确保每个元素都被检查一次,非red元素重新入队到尾部,最终所有red元素会集中在队列前端
  • 统计red元素数量后,第二次遍历只处理剩余的非red元素,将blue元素保留在red之后,yellow元素自然被移到最后
  • 整个过程始终只使用一个队列,符合练习要求

内容的提问来源于stack exchange,提问作者Henrique de Liz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:35:09