《程式設計師程式碼面試指南》第一章 棧和佇列 貓狗佇列
阿新 • • 發佈:2018-12-22
題目
通過給定的類實現貓狗佇列
程式
/** * @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"); } }