1. 程式人生 > >《程式設計師程式碼面試指南》第一章 棧和佇列 貓狗佇列

《程式設計師程式碼面試指南》第一章 棧和佇列 貓狗佇列

題目

通過給定的類實現貓狗佇列

程式

/**
 * @Description:貓狗佇列
 * @Author: lizhouwei
 * @CreateDate: 2018/4/5 14:34
 * @Modify by:
 * @ModifyDate:
*/
public class Chapter1_4 {
    private static final String DOG ="dog";
    private static final String CAT ="cat";

    private Queue<PetQueue> dogQueue ; //存放狗的佇列
    private Queue<PetQueue> catQueue; //存放貓的佇列
    private long count;//標記存放先後順序的
    public Chapter1_4(){
        this.dogQueue = new LinkedList<PetQueue>();//初始化
        this.catQueue = new LinkedList<PetQueue>();//初始化
        this.count = 0;//初始化
    }
    public void add(Pet pet){
        if(DOG.equalsIgnoreCase(pet.getType())){
             dogQueue.offer(new PetQueue(pet,this.count++));
        }else{
            catQueue.offer(new PetQueue(pet,this.count++));
        }
    }

    //取出佇列中最早進入佇列的寵物
    public Pet pollAll(){
       //如果 兩個佇列中都有值
        if(!dogQueue.isEmpty() && !catQueue.isEmpty()){
            //如果dog的存放的編號小於cat的編號,則 說明dog比cat存放的早
            if(dogQueue.peek().getNumber()<catQueue.peek().getNumber()){
                return dogQueue.poll().getPet();
            }else{
                return catQueue.poll().getPet();
            }
        }else if(!dogQueue.isEmpty()) {
            //如果dog佇列中有值而 cat佇列已為空
            return dogQueue.poll().getPet();
        }else if(!catQueue.isEmpty()){
            //如果cat佇列中有值而 dog佇列已為空
            return catQueue.poll().getPet();
        }else{
            //都為空
            return null;
        }
    }
    //判斷對列中是否都為空
    public boolean isEmpty(){
        return dogQueue.isEmpty() && catQueue.isEmpty();
    }
    //判斷dog佇列中是否都為空
    public boolean dogIsEmpty(){
        return dogQueue.isEmpty();
    }
    //判斷cat佇列中是否都為空
    public boolean catIsEmpty(){
        return catQueue.isEmpty();
    }

    //測試
    public static  void  main(String[] args){
        Chapter1_4 chapter = new Chapter1_4();
        for(int i=0;i<10;i++) {
            if((i&1)!=0){
                chapter.add(new Pet(DOG));
            }else{
                chapter.add(new Pet(CAT));
            }
         }
        System.out.println(chapter.isEmpty());
        System.out.println(chapter.dogIsEmpty());
        System.out.println(chapter.catIsEmpty());
        while(!chapter.isEmpty()){
            System.out.print(chapter.pollAll().getType() +" ");
        }
    }
}
// 建立一個pet的佇列類
class PetQueue{
    private Pet pet;//存放的寵物
    private long number; //存放的編號
    public PetQueue(Pet pet, long number) {
        this.pet = pet;
        this.number = number;
    }
    //獲取編號
    public long getNumber(){
        return this.number;
    }
    //獲取寵物
    public Pet getPet(){
        return this.pet;
    }
}
//題目給的,不能隨意修改的
 class Pet{
    private String type;
     public Pet(){
      }
    public Pet(String type){
        this.type = type;
    }
    public String getType(){
        return this.type;
    }
}
//題目給的,不能隨意修改的
class Dog extends  Pet{
 public Dog(){
     super("dog");
 }
}
//題目給的,不能隨意修改的
class Cat extends  Pet{
    public Cat(){
        super("cat");
    }
}