猫狗队列求解
来源:互联网 发布:苹果6s淘宝虚拟定位 编辑:程序博客网 时间:2024/04/30 14:15
这道题主要锻炼了类的包装,考察面向对象的思想
题目:
宠物、猫和狗的类如下:
public class Pet{private String type;public Pet(String type){this.type = type;}public String getPetType(){return this.type;}}public class Dog extends Pets{public Dog(){super("Dog");}}public class Cat extends Pet{public Cat(){super("Cat");}}
实现一种猫狗队列的结构,要求如下:
用户可以调用add方法将cat类或dog类的实例放入队列中;
用户可以调用pollAll方法,将队列中所有的实例按照进队列的先后顺序依次弹出;
用户可以调用pollDog方法,将队列中Dog类的实例按照进队列的先后顺序依次弹出;
用户可以调用pollCat方法,将队列中Cat类的实例按照进队列的先后顺序依次弹出;
用户可以调用isEmpty方法,检查队列中是否还有dog或cat的实例;
用户可以调用isDogEmpty方法,检查队列中是否还有dog类的实例
用户可以调用isCatEmpty方法,检查队列中是否还有cat类的实例
要求所有实现的方法,时间复杂度都为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();}}}
阅读全文
0 0
- 猫狗队列求解
- Mooo 单调队列求解
- 迷宫求解(使用队列
- 用队列实现迷宫求解
- 迷宫求解(队列算法)
- 数据结构:栈和队列-迷宫问题求解
- 队列:广度优先搜索求解迷宫
- 用栈和队列实现迷宫求解
- 内螺旋队列的另一种求解方式
- [Java]使用队列求解josephus问题
- 队列应用1:求解报数问题
- 用栈和队列求解迷宫问题
- 利用BFS、队列求解迷宫问题
- Java队列递归求解素数环问题
- 顺序队列求解迷宫(最优解)
- 1栈和队列--猫狗队列
- 栈和队列 猫狗队列
- 数据结构 猫狗队列
- TensorFlow定义一个线性分类模型
- JavaScrip实现计算器
- MongoDB常用命令汇总之修改、添加、删除集合数据。
- 归并排序
- 堆排序
- 猫狗队列求解
- java并发编程--并发容器CopyOnWriteArrayList
- Android Studio 打包签名教程
- Java重要知识点
- 丢史蒂芬妮“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛
- 20170711训练赛比赛总结
- ProjectEuler-Problem20-Factorial digit sum
- 回来了,新的里程,gogooo
- 取消浮动影响