美文网首页程序员代码面试
【算法题】猫狗队列

【算法题】猫狗队列

作者: 埋没随百草 | 来源:发表于2018-12-02 23:21 被阅读0次

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

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

解题思路

设计一个PetEntity类,用于保存Pet对象以及入队列的序号。同时使用两个栈分别用于存储Cat和Dog。add时把Cat和Dog分别添加到对应的队列,poll时检查入队列序号,序号小的先出队列。

实现代码

import java.util.Queue;

public class CatDogQueue {
    private Queue<PetEntity> catQueue;
    private Queue<PetEntity> dogQueue;
    private long seq;

    public CatDogQueue(Queue<PetEntity> catQueue, Queue<PetEntity> dogQueue, long seq) {
        this.catQueue = catQueue;
        this.dogQueue = dogQueue;
        this.seq = seq;
    }

    public void add(Pet pet) {
        if (pet.getType().equals("cat")) {
            catQueue.add(new PetEntity(pet, this.seq++));
        } else if (pet.getType().equals("dog")) {
            dogQueue.add(new PetEntity(pet, this.seq++));
        } else {
            throw new RuntimeException("Unknown pet type");
        }
    }

    public Pet pollAll() {
        if (!dogQueue.isEmpty() && !catQueue.isEmpty()) {
            if (dogQueue.peek().getSeq() < catQueue.peek().getSeq()) {
                return dogQueue.peek().getPet();
            } else {
                return catQueue.peek().getPet();
            }
        } else if (!dogQueue.isEmpty()) {
            return dogQueue.peek().getPet();
        } else if (!catQueue.isEmpty()) {
            return catQueue.peek().getPet();
        } else {
            throw new RuntimeException("CatDogQueue is empty");
        }
    }

    public Cat pollCat() {
        if (!catQueue.isEmpty()) {
            return (Cat) catQueue.peek().getPet();
        } else {
            throw new RuntimeException("catQueue is empty");
        }
    }

    public Dog pollDog() {
        if (!dogQueue.isEmpty()) {
            return (Dog) dogQueue.peek().getPet();
        } else {
            throw new RuntimeException("dogQueue is empty");
        }
    }

    public boolean isEmpety() {
        return catQueue.isEmpty() && dogQueue.isEmpty();
    }

    public boolean isCatQueueEmpty() {
        return catQueue.isEmpty();
    }

    public boolean isDogQueueEmpty() {
        return dogQueue.isEmpty();
    }
    
    public static class PetEntity {
        private Pet pet;
        private long seq;

        public PetEntity(Pet pet, long seq) {
            this.pet = pet;
            this.seq = seq;
        }

        public Pet getPet() {
            return pet;
        }

        public long getSeq() {
            return seq;
        }

        public String getType() {
            return getPet().getType();
        }
    }

    public static class Pet {
        private String type;

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

        public String getType() {
            return type;
        }
    }

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

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

相关文章

  • 【算法题】猫狗队列

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

  • 01.算法总结

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

  • 猫狗队列

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

  • 猫狗队列

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

  • 猫狗队列

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

  • 猫狗队列

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

  • 猫狗队列

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

  • 数据结构——栈和队列

    用数组实现栈和队列 用栈实现队列 用队列实现栈 栈和队列的经典算法题最小间距栈宠物收养所 数组实现栈和队列 用数组...

  • 栈与队列算法题

    栈 当前位置的元素不能立刻计算,需要隔着一段距离去找另一个对应的元素。 单调栈问题: 42.接雨水 (hard)当...

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

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

网友评论

    本文标题:【算法题】猫狗队列

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