程序员代码面试指南刷题--第一章.猫狗队列

题目描述

实现一种猫狗队列的结构,要求如下:

  1. 用户可以调用 add 方法将 cat 或者 dog 放入队列中
  2. 用户可以调用 pollAll 方法将队列中的 cat 和 dog 按照进队列的先后顺序依次弹出
  3. 用户可以调用 pollDog 方法将队列中的 dog 按照进队列的先后顺序依次弹出
  4. 用户可以调用 pollCat 方法将队列中的 cat 按照进队列的先后顺序依次弹出
  5. 用户可以调用 isEmpty 方法检查队列中是否还有 dog 或 cat
  6. 用户可以调用 isDogEmpty 方法检查队列中是否还有 dog
  7. 用户可以调用 isCatEmpty 方法检查队列中是否还有 cat

输入描述:

第一行输入一个整数 n 表示 用户的操作总次数。

以下 n行 每行表示用户的一次操作

每行的第一个参数为一个字符串 s,若 s = “add”, 则后面接着有 “cat x”(表示猫)或者“dog x”(表示狗),其中的 x 表示猫狗的编号。

输出描述:

对于每个操作:

若为 “add”,则不需要输出。

以下仅列举几个代表操作,其它类似的操作输出同理。

若为 “pollAll”,则将队列中的 cat 和 dog 按照进队列的先后顺序依次弹出。(FIFO),格式见样例。

若为 “isEmpty”,则检查队列中是否还有 dog 或 cat, 为空则输出 “yes”, 否则输出 “no”。

示例1
输入
11
add cat 1
add dog 2
pollAll
isEmpty
add cat 5
isDogEmpty
pollCat
add dog 10
add cat 199
pollDog
pollAll

输出
cat 1
dog 2
yes
yes
cat 5
dog 10
cat 199

解法一:使用三个队列报错

import java.util.*;
import java.io.*;
public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int len = Integer.parseInt(br.readLine());
        CDQueue q = new CDQueue();
        for(int i=0;i<len;i++){
            String[] ss = br.readLine().trim().split(" ");
            if(ss[0].equals("add")){
                q.add(ss[1],Integer.parseInt(ss[2]));
            }else if(ss[0].equals("pollAll")){
                q.pollAll();
            }else if(ss[0].equals("pollDog")){
                q.pollDog();
            }else if(ss[0].equals("pollCat")){
                q.pollCat();
            }else if(ss[0].equals("isEmpty")){
                q.isEmpty();
            }else if(ss[0].equals("isDogEmpty")){
                q.isDogEmpty();
            }else {
                q.isCatEmpty();
            }
            
        }
    } 
}
class CDQueue{
    Queue<Animal> allq = new LinkedList<>();
    Queue<Animal> catq = new LinkedList<>();
    Queue<Animal> dogq = new LinkedList<>();
    public void add(String cd,int num){
        Animal animal;
        if(cd.equals("cat")){
            animal= new Animal("cat",num);
            catq.add(animal);
        }else if(cd.equals("dog")){
            animal = new Animal("dog",num);
            dogq.add(animal);
        }else{
            throw new RuntimeException("没这个物种");
        }
        allq.add(animal);
    }
    public void pollAll(){
        StringBuilder sb = new StringBuilder();
        while(!allq.isEmpty()){
            Animal animal = allq.poll();
            if(animal.name.equals("cat")){
                catq.poll();
            }else if(animal.name.equals("dog")){
                dogq.poll();
            }
            sb.append(animal.name).append(" ").append(animal.num);
            if(!allq.isEmpty()){
                sb.append("\n");
            }
        }
        System.out.println(sb.toString());
    }
    public void pollDog(){
        StringBuilder sb = new StringBuilder();
        while(!dogq.isEmpty()){
            Animal dog = dogq.poll();
            sb.append(dog.name).append(" ").append(dog.num);
            if(!dogq.isEmpty()){
                sb.append("\n");
            }
            allq.remove(dog);
        }
        System.out.println(sb.toString());
    }
    public void pollCat(){
        StringBuilder sb = new StringBuilder();
        while(!catq.isEmpty()){
            Animal cat = catq.poll();
            sb.append(cat.name).append(" ").append(cat.num);
            if(!catq.isEmpty()){
                sb.append("\n");
            }
            allq.remove(cat);
        }
        System.out.println(sb.toString());
    }
    public void isEmpty(){
        if(allq.isEmpty()){
           System.out.println("yes");
            return ;
        }
        System.out.println("no");
    }
    public void isDogEmpty(){
        if(dogq.isEmpty()){
            System.out.println("yes");
            return ;
        }
        System.out.println("no");
    }
    public void isCatEmpty(){
        if(catq.isEmpty()){
            System.out.println("yes");
            return;
        }
        System.out.println("no");
    }
}
class Animal{
    String name;
    int num;
    public Animal(String name,int num){
        this.name = name;
        this.num = num;
    }
}

解法二:两个队列

思路: 大概思路是这样可以,

import java.util.*;
import java.io.*;
public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int len = Integer.parseInt(br.readLine());
        CDQueue q = new CDQueue();
        for(int i=0;i<len;i++){
            String[] ss = br.readLine().trim().split(" ");
            if(ss[0].equals("add")){
                q.add(ss[1],Integer.parseInt(ss[2]));
            }else if(ss[0].equals("pollAll")){
                q.pollAll();
            }else if(ss[0].equals("pollDog")){
                q.pollDog();
            }else if(ss[0].equals("pollCat")){
                q.pollCat();
            }else if(ss[0].equals("isEmpty")){
                q.isEmpty();
            }else if(ss[0].equals("isDogEmpty")){
                q.isDogEmpty();
            }else {
                q.isCatEmpty();
            }
            
        }
    } 
}
class CDQueue{
    Queue<PetInQueue> catq = new LinkedList<>();
    Queue<PetInQueue> dogq = new LinkedList<>();
    int count = 0;
    public void add(String cd,int num){
        Animal animal;
        PetInQueue pet;
        if(cd.equals("cat")){
            animal= new Animal("cat",num);
            pet = new PetInQueue(animal,count++);
            catq.add(pet);
        }else if(cd.equals("dog")){
            animal = new Animal("dog",num);
            pet = new PetInQueue(animal,count++);
            dogq.add(pet);
        }else{
            throw new RuntimeException("没这个物种");
        }
    }
    public void pollAll(){
        StringBuilder sb = new StringBuilder();
        Animal animal;
        PetInQueue  pet;
        while(!catq.isEmpty()&&!dogq.isEmpty()){
            if(catq.peek().count<dogq.peek().count){
                pet = catq.poll();
                animal = pet.animal;
            }else {
                pet = dogq.poll();
                animal = pet.animal;
            }
            sb.append(animal.name).append(" ").append(animal.num);
            if(!catq.isEmpty()||!dogq.isEmpty()){
                sb.append("\n");
            }
        }
        while(!catq.isEmpty()){
            pet = catq.poll();
            animal = pet.animal;
            sb.append(animal.name).append(" ").append(animal.num);
            if(!catq.isEmpty()){
                sb.append("\n");
            }
        }
        while(!dogq.isEmpty()){
            pet = dogq.poll();
            animal = pet.animal;
            sb.append(animal.name).append(" ").append(animal.num);
            if(!dogq.isEmpty()){
                sb.append("\n");
            }
        }
        System.out.println(sb.toString());
    }
    public void pollDog(){
        StringBuilder sb = new StringBuilder();
        while(!dogq.isEmpty()){
            Animal dog = dogq.poll().animal;
            sb.append(dog.name).append(" ").append(dog.num);
            if(!dogq.isEmpty()){
                sb.append("\n");
            }
        }
        System.out.println(sb.toString());
    }
    public void pollCat(){
        StringBuilder sb = new StringBuilder();
        while(!catq.isEmpty()){
            Animal cat = catq.poll().animal;
            sb.append(cat.name).append(" ").append(cat.num);
            if(!catq.isEmpty()){
                sb.append("\n");
            }
        }
        System.out.println(sb.toString());
    }
    public void isEmpty(){
        if(catq.isEmpty()&&dogq.isEmpty()){
           System.out.println("yes");
            return ;
        }
        System.out.println("no");
    }
    public void isDogEmpty(){
        if(dogq.isEmpty()){
            System.out.println("yes");
            return ;
        }
        System.out.println("no");
    }
    public void isCatEmpty(){
        if(catq.isEmpty()){
            System.out.println("yes");
            return;
        }
        System.out.println("no");
    }
}
class Animal{
    String name;
    int num;
    public Animal(String name,int num){
        this.name = name;
        this.num = num;
    }
}
class PetInQueue{
    Animal animal;
    int count;
    public PetInQueue(Animal animal,int count){
        this.animal = animal;
        this.count = count;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值