设计自定义栈类
- 模拟入栈、出栈
- 判断栈是否为空、是否已满
- 改变栈的大小
栈是一种操作受限的数据结构,只能在一侧进行元素的增加和删除操作
基本思路 :对列表进行封装和二次开发,通过在列表尾部追加和删除元素来模拟栈的入栈和出栈操作。如果栈内部封装的列表中元素数量达到容量的限制则表示已满,如果列表为空则表示栈已空。改变栈的大小时,如果新的大小比栈中已有的元素数量还小,则拒绝该操作。
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._current == self._size
#入栈
def push(self,v):
if self._current < self._size:
#在列表尾部追加元素
self._content.append(v)
#在栈中元素个数加1
self._current += 1
else:
print('Stack Full')
#出栈
def pop(self):
if self._content:
#栈中元素个数减1
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__