1 # encoding=utf-8 2 3 class Queue: 4 """ 5 相同元素的队列, 初始化需指定长度与元素类型 6 """ 7 def __init__(self, size=25, _type=int): 8 """ 9 __size: the size of queue 10 __cur_size: the size of elements 11 :param size: init size of queue 12 :param _type: the type of queue element 13 """ 14 assert isinstance(size, int) 15 if not type(_type) == type.__class__: 16 "传递的是类实例" 17 _type = type(_type) 18 self.__type = _type 19 self.__value = [] 20 self.__size = size 21 self.__cur_size = 0 22 23 def __del__(self): 24 del self.__value 25 26 def __str__(self): 27 return str(self.__value) + '\t\tQueue for %s and size=%s' % (self.__type, self.__size) 28 29 def put(self, value): 30 """ 31 push an element to stack top 32 :param value: element 33 :return: None 34 """ 35 assert isinstance(value, self.__type) 36 if self.__cur_size >= self.__size: 37 raise OverflowError('the Queue if full') 38 self.__value.append(value) 39 self.__cur_size += 1 40 41 def get(self): 42 """ 43 pop an element from stack top 44 :return: element in stack top 45 """ 46 if not self.__cur_size: 47 raise IndexError('the Queue is empty') 48 self.__cur_size -= 1 49 return self.__value.pop(0) 50 51 def empty(self): 52 """ 53 set the queue to empty 54 :return: None 55 """ 56 del self.__value 57 self.__value = [] 58 self.__size = 0 59 60 @property 61 def is_empty(self): 62 """ 63 queue == empty 64 :return: bool 65 """ 66 return not self.__cur_size 67 68 @property 69 def is_full(self): 70 """ 71 queue == full 72 :return: bool 73 """ 74 return self.__size == self.__cur_size 75 76 def resize(self, size): 77 """ 78 reset a size for queue 79 :param size: new size of queue 80 :return: None 81 """ 82 assert isinstance(size, int) 83 if size < self.__cur_size: 84 del self.__value[0: self.__cur_size-size] 85 self.__cur_size = size 86 self.__size = size 87 88 @property 89 def remainder_size(self): 90 """ 91 remainder_size of queue 92 :return: remainder_size of queue 93 """ 94 return self.__size - self.__cur_size
实例化时, 类型可通过类名或实例传递, 如下:
Queue(10, 1)
Queue(10, int)
浙公网安备 33010602011771号