如何为自定义Python栈类添加最大容量设置功能?
如何给自定义MyStack类添加最大容量限制?
嘿,我来帮你搞定这个自定义栈的容量限制需求!要给你的MyStack类加上最大容量的限制,你需要做以下几个修改和新增,我给你一步步理清楚:
需要修改/新增的内容:
1. 修改__init__构造方法
给构造函数新增一个max_capacity参数,让用户可以指定栈的最大容量,同时保留默认无限制的情况(默认设为None),这样原来的代码调用也能兼容,不会出错。
修改后的代码:
def __init__(self, max_capacity=None): self.myList = [] self.top = -1 self.size = 0 self.max_capacity = max_capacity # 新增最大容量属性
2. 新增isFull方法
和现有的isEmpty方法对应,用来判断栈是否已经达到最大容量,不管是内部逻辑判断还是外部调用都很方便。
代码实现:
def isFull(self): # 如果max_capacity为None,说明无容量限制,永远不会满 if self.max_capacity is None: return False return self.size >= self.max_capacity
3. 修改push方法
在添加新元素前,先检查栈是否已满,如果已满就抛出异常(这是Python中比较规范的错误处理方式),避免超出容量限制。
修改后的push方法:
def push(self, item): if self.isFull(): raise ValueError("栈已达到最大容量,无法添加新元素") self.myList.append(item) self.size += 1 self.top += 1
4. 补全未完成的pop方法
看你原来的pop代码没写完,这里顺便帮你补全逻辑,确保size和top属性能正确更新:
def pop(self): if self.isEmpty(): return None else: self.ret = self.myList.pop(self.top) self.size -= 1 self.top -= 1 return self.ret
完整的MyStack类代码
整合所有修改后的完整代码如下:
class MyStack: def __init__(self, max_capacity=None): self.myList = [] self.top = -1 self.size = 0 self.max_capacity = max_capacity def isEmpty(self): return self.size == 0 # 这里简化写法,更简洁直观 def isFull(self): if self.max_capacity is None: return False return self.size >= self.max_capacity def push(self, item): if self.isFull(): raise ValueError("栈已达到最大容量,无法添加新元素") self.myList.append(item) self.size += 1 self.top += 1 def pop(self): if self.isEmpty(): return None self.ret = self.myList.pop(self.top) self.size -= 1 self.top -= 1 return self.ret
使用示例
# 创建一个最大容量为3的栈 stack = MyStack(max_capacity=3) stack.push(1) stack.push(2) stack.push(3) print(stack.pop()) # 输出3 stack.push(4) stack.push(5) # 这里会抛出ValueError,因为容量已满
内容的提问来源于stack exchange,提问作者박진수
相关产品推荐
相关产品推荐

