Python栈的实现方法示例【列表、单链表】
本文实例讲述了Python栈的实现方法。分享给大家供大家参考,具体如下:
Python实现栈
- 栈的数组实现:利用python列表方法
代码如下:
#列表实现栈,利用python列表方法
classlistStack(object):
def__init__(self):
self.items=[]
defis_empty(self):
returnself.items==0
defsize(self):
returnlen(self.items)
deftop(self):
returnself.items[len(self.items)-1]
defpush(self,value):
returnself.items.append(value)
defpop(self):
returnself.items.pop()
if__name__=="__main__":
stack=listStack()
stack.push("welcome")
stack.push("www")
stack.push("jb51")
stack.push("net")
print"栈的长度:",stack.size()
print"\n".join(['%s:%s'%itemforiteminstack.__dict__.items()])#打印栈stack所有元素
print"出栈:",stack.pop()
print"出栈:",stack.pop()
print"出栈:",stack.pop()
运行结果:
栈的长度:4
items:['welcome','www','jb51','net']
出栈:net
出栈:jb51
出栈:www
- 栈的链表实现:
栈的链表实现中,压栈(push)类似于在单链表中表头添加节点;出栈(pop)类似于链表中表头删除节点并返回对应节点值;栈顶元素(top)就是获取链表中的第一个元素
链表节点的定义直接嵌套在链表栈类中
代码如下:
#链表实现栈
classlinkedStack(object):
classNode(object):
def__init__(self,value=None,next=None):
self.value=value
self.next=next
def__init__(self):
self.top=None
self.length=0
defis_empty(self):
returnself.length==0
defsize(self):
returnself.length
#获取栈顶元素
defget(self):
ifself.is_empty():
raiseException("Stackisempty!")
returnself.top.value
#压栈
defpush(self,value):
node=self.Node(value)
old_top=self.top
self.top=node
node.next=old_top
self.length+=1
#出栈
defpop(self):
ifself.length==0:
raiseException("Stackisempty!")
item=self.top.value
curnode=self.top.next
self.top.next=self.top
self.top=curnode
self.length-=1
returnitem
if__name__=="__main__":
stack=linkedStack()
stack.push("welcome")
stack.push("www")
stack.push("jb51")
stack.push("net")
print"栈的长度:",stack.size()
print"出栈:",stack.pop()
print"出栈:",stack.pop()
print"出栈:",stack.pop()
print"出栈:",stack.pop()
运行结果:
栈的长度:4
出栈:net
出栈:jb51
出栈:www
出栈:welcome
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。