栈和队列 猫狗队列

【题目】

宠物,猫,和狗的类如下

class Pet{
	private String type;
	Pet(String type) {
		this.type = type;
	}
	public String getPet(){
		return type;
	}
}
class Dog extends Pet{
	Dog(String type){
		super(type);
	}
}
class Cat extends Pet{
	Cat(String type){
		super(type);
	}
}
实现 一种猫狗队列的结构,要求如下:

用户可以调用add方法将Cat类或者Dog类的实例放入队列中

用户可以调用pollAll方法,将队列中的所有实例按照进队列的先后顺序依次弹出;

用户可以调用pollDog方法,将队列中Dog的实例按照进队列的先后顺序依次弹出;

用户可以调用pollCat方法,将队列中Cat的实例按照进队列的先后顺序依次弹出;

用户可以调用isEmpty方法,检查队列中是否还有Cat或者Dog类的实例;

用户可以调用isDogEmpty方法,检查队列中是否还有Dog类的实例;

用户可以调用isCatEmoty方法,检查队列中是否还有Cat类的实例;


【解答】

本题将实现不同的实例盖上时间戳的方法,但是又不能改变用户本身的类,所以定义一个新的类,具体实现请参看如下的PetEnterQueue类

public 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.getType();
	}
}
DogCatQueue类的整体设计如下

import java.util.LinkedList;
import java.util.Queue;

public class DogCatQueue {
	private Queue<PetEnterQueue> dogQ;
	private Queue<PetEnterQueue> catQ;
	private long count;
	
	public DogCatQueue(){
		dogQ = new LinkedList<>();
		catQ = new LinkedList<>();
		count = 0;
	}
	public void add(Pet pet){
		if(pet.getType().equals("dog"))
			this.dogQ.add(new PetEnterQueue(pet,this.count++));
		else if(pet.getType().equals("cat"))
			this.catQ.add(new PetEnterQueue(pet,this.count++));
		else
			throw new RuntimeException("erro,no cat or dog");
	}
	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("erro,queue is empty");
	}
	public Dog pollDog(){
		if(!this.isDogQueueEmpty())
			return (Dog) this.dogQ.poll().getPet();
		else
			throw new RuntimeException("Dog quque is empty");
	}
	public Cat pollCat(){
		if(!this.isCatQueueEmpty())
				return (Cat)this.catQ.poll().getPet();
		else
			throw new RuntimeException("Cat queue is empty");
	}
	public boolean isDogQueueEmpty(){
		return this.dogQ.isEmpty();
	}
	public boolean isCatQueueEmpty(){
		return this.catQ.isEmpty();
	}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值