程序员代码面试指南 python实现(第一章 栈和队列:猫狗队列)
程序员代码面试指南 python实现(第一章 栈和队列)
猫狗队列
题目描述
注意
源码
"""
实现stack Queue这样的基础类
"""
class Stack(object):
def __init__(self):
self.item = []
def isEmpty(self):
return self.item == []
def push(self,newElem):
self.item.append(newElem)
def pop(self):
if self.isEmpty():
raise Exception("Ypur stack is Empty!")
else:
return self.item.pop()
def peek(self):
if self.isEmpty():
raise Exception("Your stack is Empty!")
else:
return self.item[len(self.item)-1]
def size(self):
return len(self.item)
class Queue(object):
def __init__(self):
self.stackPush = Stack()
self.stackPop = Stack()
def add(self,newElem):
self.stackPush.push(newElem)
def poll(self):
if self.stackPush.isEmpty() and self.stackPop.isEmpty():
raise Exception("Your Queue is empty!")
elif self.stackPop.isEmpty():
while(self.stackPush.isEmpty() != True):
self.stackPop.push(self.stackPush.pop())
return self.stackPop.pop()
def peek(self):
if self.stackPop.isEmpty() and self.stackPush.isEmpty():
raise Exception("your Queue is empty!")
elif self.stackPop.isEmpty():
while(self.stackPush.isEmpty() != True):
self.stackPop.push(self.stackPush.pop())
return self.stackPop.pop()
def size(self):
return self.stackPush.size()
def isEmpty(self):
return self.stackPush.isEmpty() and self.stackPop.isEmpty()
class Pet(object):
def __init__(self,type):
self.type = type
def getPetType(self):
return self.type
class Dog(Pet):
def __init__(self):
super.__init__("dog")
class Cat(Pet):
def __init__(self):
super.__init__("cat")
class PetEnterQueue(object):
def __init__(self,pet,count):
self.__pet = pet
self.__count = count
def getPet(self):
return self.__pet
def getCount(self):
return self.__count
def getPetCount(self):
return self.__pet.getPetType()
class DogCatQueue(object):
def __init__(self):
self.__dogQ = Queue()
self.__catQ = Queue()
self.__count = 0
def add(self,pet):
if pet.getPetType()=="dag":
self.__count += 1
self.__dogQ.add(PetEnterQueue(pet,self.__count))
elif pet.getPetType()=="cat":
self.__count += 1
self.__catQ.add(PetEnterQueue(pet,self.__count))
else:
raise Exception("err,not dag or cat!")
def pollDog(self):
if self.__dogQ.isEmpty():
raise Exception("Dog queue is empty!")
else:
return self.__dogQ.poll().getPet()
def pollCat(self):
if self.__catQ.isEmpty():
raise Exception("Cat queue is empty!")
else:
return self.__catQ.poll().getPet()
def pollAll(self):
if self.__dogQ.isEmpty() != True and self.__catQ.isEmpty() != True:
if self.__dogQ.peek().getCount() < self.__catQ.peek().getCount():
return self.__dogQ.poll().getPet()
else:
return self.__catQ.poll().getPet()
elif self.__dogQ.isEmpty() != True:
return self.__dogQ.poll().getPet()
elif self.__catQ.isEmpty() != True:
return self.__catQ.poll().getPet()
else:
raise Exception("err,Your Queue is empty!")
def isEmpty(self):
return self.__dogQ.isEmpty() and self.__catQ.isEmpty()
def isDogQueueEmpty(self):
return self.__dogQ.isEmpty()
def isCatQueueEmpty(self):
return self.__catQ.isEmpty()