猫狗队列求解
這道題主要鍛煉了類的包裝,考察面向?qū)ο蟮乃枷?/p>
題目:
寵物、貓和狗的類如下:
實現(xiàn)一種貓狗隊列的結構,要求如下:
用戶可以調(diào)用add方法將cat類或dog類的實例放入隊列中;
用戶可以調(diào)用pollAll方法,將隊列中所有的實例按照進隊列的先后順序依次彈出;
用戶可以調(diào)用pollDog方法,將隊列中Dog類的實例按照進隊列的先后順序依次彈出;
用戶可以調(diào)用pollCat方法,將隊列中Cat類的實例按照進隊列的先后順序依次彈出;
用戶可以調(diào)用isEmpty方法,檢查隊列中是否還有dog或cat的實例;
用戶可以調(diào)用isDogEmpty方法,檢查隊列中是否還有dog類的實例
用戶可以調(diào)用isCatEmpty方法,檢查隊列中是否還有cat類的實例
要求所有實現(xiàn)的方法,時間復雜度都為O(1)
public class DogCat{public static class Pet{private String type;public Pet(String type){this.type = type;}public String getPetType(){return this.type;}}public static class Dog extends Pet{public Dog(){super("dog");}}public static class Cat extends Pet{public Cat(){super("cat");}}public static class PetEnterQueue{private Pet pet;private long count;public PetEnterQueue(Pet pet, long count){this.pet = pet;this.count = count;}public Pet getPet{return this.pet;}public long getCount(){return this.count;}public String getEnterPetType(){return this.pet.getPetType();}}public static class DogCatQueue{private Queue<PetEnterQueue> dogQ;private Queue<PetEnterQueue> catQ;private long count;public DogCatQueue(){this.dogQ = new LinkedList<PetEnterQueue>();this.catQ = new LinkedList<PetEnterQueue>();this.count = 0;}public void add(Pet pet){if(pet.getPetType().equals("dog")){this.dogQ.add(new PetEnterQueue(pet, this.count++));}else if(pet.getPetType().equals("cat")){this.catQ.add(new PetEnterQueue(pet, this.count++));}else{throw new RuntimException("No dogs or cats");}}public Pet pollAll(){if(!this.dogQ.isEmpty() && !this.catQ.isEmpty()){if(this.dogQ.peek().getCount() < this.catQ.peek().getCount()){return this.dogQ.poll().getPet();}else{return this.catQ.poll().getPet();}}else if(!this.dogQ.isEmpty()){return this.dogQ.poll().getPet();}else if(!this.catQ.isEmpty()){return this.catQ.poll().getPet();}else{throw new RuntimeException("queue is empty!");``}}public Dog pollDog(){if(!this.isDogQueueEmpty()){return (Dog)this.dogQ.poll().getPet();}else{throw new RuntimeException("Dog queue is empty!");}}public Cat pollCat(){if(!this.isCatQueueEmpty()){return (Cat)this.catQ.poll().getPet();}else{throw new RuntimeException("Cat3 queue is empty!");}}public boolean isEmpty(){return this.dogQ.isEmpty() && this.catQ.isEmpty();}public boolean isDogQueueEmpty(){return this.dogQ.isEmpty();}public boolean isCatQueueEmpty(){return this.catQ.isEmpty();}} }
總結
- 上一篇: 有关递归的三道算法题总结
- 下一篇: 汉诺塔的改编题(用栈求解,分别递归和非递