设计自定义栈类,模拟入栈、出栈、判断栈是否为空、判断栈是否已满以及改变栈大小的操作。
class Stack:
# 构造方法
def __init__(self, maxlen=10):
self._content = []
self._size = maxlen
self._current = 0
# 析构函数,释放列表控件
def __del__(self):
del self._content
# 清空栈中的元素
def clear(self):
self._content = []
self._current = 0
# 测试栈是否为空
def isEmpty(self):
return not self._content
# 修改栈的大小
def setSize(self, size):
# 不允许新的栈小于已有元素数量
if size < self._current:
print('new size must >=' + str(self._current))
return
self._size = size
# 测试栈是否已满
def isFull(self):
return self._content == self._size
# 入栈
def push(self, v):
if self._current < self._size:
# 在列表尾部追加元素
self._content.append(v)
# 栈中元素加1
self._current = self._current + 1
else:
print('stack is full')
# 出栈
def pop(self):
if self._current:
# 栈中元素个数减1
self._current = self._current - 1
# 弹出并返回列表尾部元素
return self._content.pop()
else:
print('stack is empty')
def __str__(self):
return 'stack(' + str(self._content) + ', maxlen=' + str(self._size) + ')'
# 复用 __str__ 方法的代码
__repr__ = __str__
if __name__ == '__main__':
s = Stack() # 创建栈对象
s.push(5) # 元素入栈
s.push(8)
s.push('a')
print(s.pop())
s.push('b')
s.push('c')
print(s)
s.setSize(8) # 修改栈大小
print(s)
s.setSize(3)
s.clear() # 清空栈元素
print(s.isEmpty())
s.setSize(2)
s.push(1)
s.push(2)
s.push(3)