数据结构 猫狗队列

程序员代码面试指南(左程云)读书笔记(4)

第一章

猫狗队列

题目:

   宠物,狗和猫的类如下:

    public class Pet{
        private String type;
        public Pet(String type){
            this.type=type;
        }
        public String getPetType(){
            return this.type;
        }
    }
    public class Dog extends Pet{
        public Dog(){
            super("dog");
        }

    }

    public class Cat extends Pet{
        public Cat(){
            super("cat");
        }
    }
实现一种狗猫队列的结构,要求如下:
    1. 用户可以调用add方法将cat类或dog类的实例放入队列中;
    2. 用户可以调用pollAlll方法,将队列所有的实例按照进队列的先后顺序依次弹出;
    3.用户可以调用pollDog方法,将队列中dog类的实例按照队列的先后顺序依次弹出;
    4.用户可以调用pollCat方法,将队列中Cat类的实例按照队列的先后顺序依次弹出;
    5.用户可以调用isEmpty方法,检查队列中是否还有dog或cat的实例;
    6.用户可以调用isDogEmpty方法,检查队列中是否还有dog的实例;
    7.用户可以调用isCatEmpty方法,检查队列中是否还有cat的实例;

本题实现将不同的实例盖上时间戳的方法,但是又不能改变用户的本事的类,所以定义一个新的类PetEnterQueue

package com.pet;

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 pet;
}
   public long getCount() {
    return count;
}
   public String getEnterPetType(){
       return this.pet.getPetType();
   }
}



package com.pet;

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

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;
  }
  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 RuntimeException("error,not dog or cat");
      }
  }
  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("error,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("cat 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();
  }
}














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值