我对以下代码有两个问题:
如果在空堆栈上调用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
答案 0 :(得分:54)
无需跳过这些循环,请参阅5.1.1 Using Lists as Stacks
如果你坚持使用方法isEmpty()
和push()
,你可以这样做:
class stack(list):
def push(self, item):
self.append(item)
def isEmpty(self):
return not self
答案 1 :(得分:22)
使用组合而不是继承是正确的,因为继承会带来您不想公开的方法。
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()
这样你的界面非常像list
(例如pop
上的相同行为),除了你已经锁定它以确保没有人对内部构件感到困惑。
答案 2 :(得分:11)
我不会谈论列表结构,因为这个问题已经涵盖了。相反,我会提到我处理堆栈的首选方法:
我总是使用Queue
模块。它支持FIFO和LIFO数据结构,并且是线程安全的。
有关详细信息,请参阅the docs。它没有实现isEmpty()
函数,如果无法执行推送或弹出,它会引发Full
或Empty
异常。
答案 3 :(得分:6)
Stack遵循LIFO机制。您可以创建一个列表并执行一个普通的append()
将元素追加到列表中并执行pop()
以从您刚刚插入的列表中检索该元素。
答案 4 :(得分:5)
这是堆栈类
的示例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
答案 5 :(得分:3)
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]
创建一个堆栈
要创建新堆栈,我们只需使用Stack()
例如:
s=Stack()
" S"是新堆栈的名称
<强>的isEmpty 强>
使用isEmpty()
我们可以检查我们的堆栈是否为空
例如:
我们有两个堆栈名称s1 =(0,1,4,5,6)和s2 =()
如果我们使用print(s1.isEmpty())
,则会返回False
如果我们使用print(s2.isEmpty())
,则会返回True
<强>推强>
通过使用推送操作,我们可以将项目添加到堆栈顶部
我们可以添加&#34; 6&#34;到堆栈名称&#34; s&#34;使用
s.push(6)
<强>弹出强>
我们可以使用pop操作来删除并返回堆栈的顶部项目
如果有一个堆栈名称&#34; s&#34; n项金额(n> 0) 我们可以使用
删除它最重要的项目 s.pop()
<强>大小强>
此操作将返回堆栈中的项目数
如果有一个堆栈名称&#34; s&#34; S =(1,2,3,4,5,3)
print(s.size())
将返回&#34; 6&#34;
<强>偷看强> 此操作返回顶部项而不删除它
print(s.peek())
&#34;我们可以使用print(s.items)
&#34;
答案 6 :(得分:0)
class Stack:
def __init__(self):
self.stack = []
def pop(self):
if self.is_empty():
return None
else:
return self.stack.pop()
def push(self, d):
return self.stack.append(d)
def peek(self):
if self.is_empty():
return None
else:
return self.stack[-1]
def size(self):
return len(self.stack)
def is_empty(self):
return self.size() == 0
答案 7 :(得分:0)
类栈:
def __init__(self,n):##constructor
self.no = n ##size of stack
self.Stack = [] ##list for store stack items
self.top = -1
def push(self):##push method
if self.top == self.no - 1 :##check full condition
print("Stack Overflow.....")
else:
n = int(input("enter an element :: "))
self.Stack.append(n) ## in list add stack items use of append method
self.top += 1##increment top by 1
def pop(self):## pop method
if self.top == -1: #check empty condition
print("Stack Underflow....")
else:
self.Stack.pop()## delete item from top of stack using pop method
self.top -= 1 ## decrement top by 1
def peep(self): ##peep method
print(self.top,"\t",self.Stack[-1]) ##display top item
def disp (self): #display method
if self.top == -1:# check empty condition
print("Stack Underflow....")
else:
print("TOP \tELEMENT")
for i in range(self.top,-1,-1): ## print items and top
print(i," \t",self.Stack[i])
n = int(input("Enter Size :: ")) # 栈的大小
stk = stack(n) ## 对象并将 n 作为大小传递
while(True): ## 循环选择作为 switch case
print(" 1: PUSH ")
print(" 2: POP ")
print(" 3: PEEP ")
print(" 4: PRINT ")
print(" 5: EXIT ")
option = int(input("enter your choice :: "))
if option == 1:
stk.push()
elif option == 2:
stk.pop()
elif option == 3:
stk.peep()
elif option == 4:
stk.disp()
elif option == 5:
print("you are exit!!!!!")
break
else:
print("Incorrect option")