【栈】猫狗队列

【题目描述】

    给出宠物(Pet),猫(Cat)和狗(Dog)的类,实现一种猫狗队列,要求如下:

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

【我的代码】
/**
 * 宠物 -- 父类
 */
class Pet{
	private String type;
	
	public Pet(String type) {
		this.type = type;
	}
	
	public String getPetType(){
		return this.type;
	}
}

/**
 * 子类--狗
 */
class Dog extends Pet{
	public Dog() {
		super("Dog");
	}
}

/**
 * 子类--猫
 */
class Cat extends Pet{
	public Cat() {
		super("Cat");
	}
}


/**
 * 将Pet进行封装,增加count时间戳来判断进入的先后顺序
 */
class PetEnterQueue{
	private Pet pet;
	private long count;
	
	public PetEnterQueue(Pet pet,long count) {
		this.pet = pet;
		this.count = count;
	}

	public Pet getPet() {
		return pet;
	}

	public long getCount() {
		return count;
	}
	
	public String getEnterPetType(){
		return this.pet.getPetType();
	}
}

/**
 * 猫狗对列
 */
public 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;
	}
	
	//可以将dog或者cat的实例添加进去
	public void add(Pet pet){
		if(pet.getPetType().equals("dog")){
			dogQ.add(new PetEnterQueue(pet, this.count++));
		}else if(pet.getPetType().equals("cat")){
			catQ.add(new PetEnterQueue(pet, this.count++));
		}
	}
	
	//将队列中所有的实例按照添加的先后顺序弹出
	public Pet pollAll(){
		if(!dogQ.isEmpty() && !catQ.isEmpty()){
			if(dogQ.peek().getCount() < this.catQ.peek().getCount()){
				return dogQ.poll().getPet();
			}else{
				return catQ.poll().getPet();
			}
		}else if(!dogQ.isEmpty()){
			return dogQ.poll().getPet();
		}else if(!catQ.isEmpty()){
			return catQ.poll().getPet();
		}
		return null;
	}
	
	//按照dog实例添加的先后顺序弹出dog
	public Dog pollDog(){
		if(!dogQ.isEmpty()){
			return (Dog)dogQ.poll().getPet();
		}
		return null;
	}
	
	//按照cat实例添加的先后顺序弹出cat
	public Cat pollCat(){
		if(!catQ.isEmpty()){
			return (Cat)catQ.poll().getPet();
		}
		return null;
	}
	
	//检查队列中是否有cat或者dog的实例
	public boolean isEmpty(){
		return dogQ.isEmpty() && catQ.isEmpty();
	}
	
	//检查队列中是否有dog的实例
	public boolean isDogQueueEmpty(){
		return dogQ.isEmpty();
	}
	
	//检查队列中是否有cat的实例
	public boolean isCatQueueEmpty(){
		return catQ.isEmpty();
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值