美文网首页
猫狗队列

猫狗队列

作者: 上杉丶零 | 来源:发表于2019-02-15 21:15 被阅读0次

【题目】

宠物、狗和猫的类如下:

package algorithm_and_data_structure.stack_and_queue;

public class Pet {
    private String type;

    public Pet(String type) {
        this.type = type;
    }

    public String getType() {
        return type;
    }
}

class Cat extends Pet {
    public Cat() {
        super("cat");
    }
}

class Dog extends Pet {
    public Dog() {
        super("dog");
    }
}

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

  • 用户可以调用add方法将cat类或dog类的实例放入队列中;
  • 用户可以调用pollAll方法,将队列中所有的实例按照进队列的先后顺序依次弹出;
  • 用户可以调用pollCat方法,将队列中cat类的实例按照进队列的先后顺序依次弹出;
  • 用户可以调用pollDog方法,将队列中dog类的实例按照进队列的先后顺序依次弹出;
  • 用户可以调用isEmpty方法,检查队列中是否还有dog类或cat类的实例;
  • 用户可以调用isCatEmpty方法,检查队列中是否还有cat类的实例;
  • 用户可以调用isDogEmpty方法,检查队列中是否还有dog类的实例。
package algorithm_and_data_structure.stack_and_queue;

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

public class CatDogQueue {
    private Queue<PetEnterQueue> catEnterQueue;
    private Queue<PetEnterQueue> dogEnterQueue;
    private int counter;

    public CatDogQueue() {
        catEnterQueue = new LinkedList<PetEnterQueue>();
        dogEnterQueue = new LinkedList<PetEnterQueue>();
        counter = 0;
    }

    public void add(Pet pet) {
        if (pet instanceof Cat) {
            catEnterQueue.add(new PetEnterQueue(pet, counter++));
        } else if (pet instanceof Dog) {
            dogEnterQueue.add(new PetEnterQueue(pet, counter++));
        } else {
            throw new RuntimeException("error, not cat or dog!");
        }
    }

    public Pet pollAll() {
        if (!catEnterQueue.isEmpty() && !dogEnterQueue.isEmpty()) {
            return catEnterQueue.peek().getCounter() < dogEnterQueue.peek().getCounter() ? catEnterQueue.poll().getPet() : dogEnterQueue.poll().getPet();
        } else if (!catEnterQueue.isEmpty()) {
            return catEnterQueue.poll().getPet();
        } else if (!dogEnterQueue.isEmpty()) {
            return dogEnterQueue.poll().getPet();
        } else {
            throw new RuntimeException("error, queue is empty!");
        }
    }

    public Cat pollCat() {
        if (!catEnterQueue.isEmpty()) {
            return (Cat) catEnterQueue.poll().getPet();
        } else {
            throw new RuntimeException("error, cat queue is empty!");
        }
    }

    public Dog pollDog() {
        if (!dogEnterQueue.isEmpty()) {
            return (Dog) dogEnterQueue.poll().getPet();
        } else {
            throw new RuntimeException("error, dog queue is empty!");
        }
    }

    public boolean isEmpty() {
        return catEnterQueue.isEmpty() && dogEnterQueue.isEmpty();
    }

    public boolean isCatEmpty() {
        return catEnterQueue.isEmpty();
    }

    public boolean isDogEmpty() {
        return dogEnterQueue.isEmpty();
    }
}

class PetEnterQueue {
    private Pet pet;
    private int counter;

    public PetEnterQueue(Pet pet, int counter) {
        this.pet = pet;
        this.counter = counter;
    }

    public Pet getPet() {
        return pet;
    }

    public int getCounter() {
        return counter;
    }

    public String getEnterPetType() {
        return pet.getType();
    }
}

相关文章

  • 01.算法总结

    猫狗队列 注意: 实现一种猫狗队列的结构,要求如下: 用户可以调用add方法将cat类或者dog类的实例放入队列中...

  • 猫狗队列

    宠物、猫、狗的实现如下: 实现一种猫狗队列的结构,要求如下: 用户可以调用add方法将cat类或者dog类的实例放...

  • 猫狗队列

    本题来自程序员代码面试指南 实现一种狗猫队列的结构,要求如下: ●用户可以调用add方法将cat类或dog类的实例...

  • 猫狗队列

    问题: 思路: 在给定数据结构的基础上,自定义一个数据结构,包装给定的数据结构,再加一个count计数,不管加入的...

  • 猫狗队列

    【题目】宠物、狗和猫的类如下: public class Pet{private String type;publ...

  • 猫狗队列

    【题目】 宠物、狗和猫的类如下: 实现一种猫狗队列的结构,要求如下: 用户可以调用add方法将cat类或dog类的...

  • 曾经有个说法,程序=数据结构+算法。那就给大家说说:算法总结

    作者丨雨林沐风rzm https://www.jianshu.com/p/622750145208 猫狗队列 注意...

  • 【算法题】猫狗队列

    实现一种猫狗队列的结构,要求如下: 用户可以调用add方法将cat类或者dog类的实例放入队列中; 用户可以调用p...

  • 实现一种狗猫队列的结构

    【题目】宠物、狗和猫的类如下: 实现一种狗猫队列的结构,要求如下: 用户可以调用add方法将cat类或dog类的实...

  • 三只猫和一只狗

    猫和狗不同,猫也和猫不同。 性格决定命运,放在猫身上也同样适用。 猫怕狗,猫跑狗追,越被追怕。猫越怕越跑,狗越追越...

网友评论

      本文标题:猫狗队列

      本文链接:https://www.haomeiwen.com/subject/klameqtx.html