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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。