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