栈和队列----猫狗队列

关键点:

  1. 构造Pet_Count类:pet 为动物实例,count记录该动物实例进入队列的顺序号码
  2. 两个队列:dogQcatQ  
  3. 要求实现的CatDogQueue中存储的对象类型为Pet_Count类型

代码: 

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");
	}
}
class Pet_Count{
	private Pet pet;
	private long count;
	
	public Pet_Count(Pet pet,long count) {
		this.pet = pet;
		this.count = count;
	}
	
	public Pet getPet() {
		return this.pet;
	}
	
	public long getCount() {
		return this.count;
	}
	
	public String getPetType() {
		return this.pet.getPetType();
	}
	
}

class CatDogQueue{
	
	private Queue<Pet_Count> dogQ;
	private Queue<Pet_Count> catQ;
	private long count;
	
	public CatDogQueue() {
		this.dogQ = new LinkedList<Pet_Count>();
		this.catQ = new LinkedList<Pet_Count>();
		this.count = 0;
	}
	
    public void add(Pet pet) {
		if(pet.getPetType().equals("dog")) {
			this.dogQ.add(new Pet_Count(pet, count++));
		}else if(pet.getPetType().equals("cat")) {
			this.catQ.add(new Pet_Count(pet,count++));
		}else{
			throw new RuntimeException("没有动物加入!!");
		}
	}
	
	public Pet pollAll() {
		if(!this.isDogEmpty() && !this.isCatEmpty()) {
			if(this.dogQ.peek().getCount() < this.catQ.peek().getCount()) {
				return this.dogQ.poll().getPet();
			}else{
				return this.catQ.poll().getPet();
			}
		}else if(!this.isDogEmpty()) {
			return this.dogQ.poll().getPet();
		}else if(!this.isCatEmpty()) {
			return this.catQ.poll().getPet();
		}else {
			throw new RuntimeException("Queue is empty!");
		}
		
	}
	
	public Dog pollDog() {
		if(!this.isDogEmpty()) {
			return (Dog)this.dogQ.poll().getPet();
		}else {
			throw new RuntimeException("Dog queue is empty!");
		}
		
	}
	
	public Cat pollCat() {
		if(!this.isCatEmpty()) {
			return (Cat)this.catQ.poll().getPet();
		}else {
			throw new RuntimeException("Cat queue is empty!");
		}
		
	}
	
	public boolean isEmpty() {
		return this.dogQ.isEmpty() && this.catQ.isEmpty();
	}
	
	public boolean isDogEmpty() {
		return this.dogQ.isEmpty();
	}
	
	public boolean isCatEmpty() {
		return this.catQ.isEmpty();
	}
	
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值