美文网首页
猫狗队列

猫狗队列

作者: 上杉丶零 | 来源:发表于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();
        }
    }
    

    相关文章

      网友评论

          本文标题:猫狗队列

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