我有以下代码的2个问题:
如果在空堆栈上调用pop(),我应该抛出异常吗?
class Stack(object):
def __init__(self):
self.storage = []
def isEmpty(self):
return len(self.storage) == 0
def push(self,p):
self.storage[:0] = p
def pop(self):
"""issue: throw exception?"""
return None
Run Code Online (Sandbox Code Playgroud)Kim*_*ais 54
无需跳过这些循环,请参见5.1.1将列表用作堆栈
如果你坚持使用方法isEmpty()
,push()
你可以这样做:
class stack(list):
def push(self, item):
self.append(item)
def isEmpty(self):
return not self
Run Code Online (Sandbox Code Playgroud)
Mat*_* M. 23
您使用组合而不是继承是正确的,因为继承带来了您不希望公开的方法.
class Stack:
def __init__(self):
self.__storage = []
def isEmpty(self):
return len(self.__storage) == 0
def push(self,p):
self.__storage.append(p)
def pop(self):
return self.__storage.pop()
Run Code Online (Sandbox Code Playgroud)
这样你的界面非常像list
(pop
例如相同的行为),除了你已经锁定它以确保没有人与内部混淆.
这是堆栈类的示例
class Stack(object):
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[-1]
def isEmpty(self):
return len(self.items) == 0
Run Code Online (Sandbox Code Playgroud)
class Stack:
def __init__(self):
self.items=[]
def isEmpty(self):
return self.items==[]
def push(self , item):
self.items.append(item)
def pop(self):
return self.items.pop()
def size(self):
return len(self.items)
def peek(self):
return self.items[-1]
Run Code Online (Sandbox Code Playgroud)
创建堆栈
要创建一个新堆栈,我们可以简单地使用 Stack()
例如:
s=Stack()
Run Code Online (Sandbox Code Playgroud)
“s”是新堆栈的名称
是空的
通过使用isEmpty()
我们可以检查我们的堆栈是否为空
例如:
我们有两个堆栈名称 s1=(0,1,4,5,6) 和 s2=()
如果我们使用 print(s1.isEmpty())
它会返回False
如果我们使用 print(s2.isEmpty())
它会返回True
推
通过使用推送操作,我们可以将项目添加到堆栈顶部
我们可以使用“6”添加到堆栈名称“s”
s.push(6)
Run Code Online (Sandbox Code Playgroud)
流行音乐
我们可以使用 pop 操作移除并返回栈顶元素
如果有一个包含 n 个项目 (n>0) 的堆栈名称“s”,我们可以使用
s.pop()
Run Code Online (Sandbox Code Playgroud)
尺寸
此操作将返回堆栈中的项目数
如果有一个栈名 "s" s=(1,2,3,4,5,3)
print(s.size())
Run Code Online (Sandbox Code Playgroud)
将返回“6”
peek 这个操作返回最上面的项目而不删除它
print(s.peek())
Run Code Online (Sandbox Code Playgroud)
“我们可以使用print(s.items)
”打印堆栈中的项目