Python栈算法的实现与简单应用示例


Posted in Python onNovember 01, 2017

本文实例讲述了Python栈算法的实现与简单应用。分享给大家供大家参考,具体如下:

原理:

栈作为一种数据结构,是一种只能在一端进行插入和删除操作。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)

Python栈算法的实现与简单应用示例

?C的应用场景非常多:1、内存管理中使用的堆栈;2、基于?C实现的二叉树的遍历;3、在语言处理中,符号的平衡问题,在语言中,往往很多符号是成对出现的,比如<>,{},[],()等,如何判断符号是否漏了,一种实现方式就是:假设在读入一串字符串以后,如果遇到对称符号的左边部分,则将其压入栈中,当遇到对称符号的右边部分,则弹出栈中的一个对象,如果所有的符号都是平衡的,栈中此时应该就是为空,通过判断栈中是否为空,说明字符串是否是符号平衡的。

在?C的设计中,我们需要定义一个实例属性top。三个实例方法:获取栈顶元素peek();出?Cpop();入栈push()

实例属性:self.top,要先找到一个标点,或者是能够定位的一个点,作为一个基准

实例方法:

1、入栈

把node.next=top 把入栈的节点,给一个top
top=node  #节点进来后,就是这个节点返回给
返回top的value

2、出栈

1)是否是空栈,是的话,返回None
2)否则,返回top.value,并且top指向下一个节点
发现队列或栈其实都需要找到一个节点,需要找到你现在的位置,

#给一个点,我们能够根据这个点知道一些内容
class Node(object):
  def __init__(self): #定位的点的值和一个指向
    self.val=val  #指向元素的值,原队列第二元素
    self.next=None  #指向的指针
class stack(object):
  def __init__(self):
    self.top=None #初始化最开始的位置
  def peek(self): #获取栈顶的元素
    if self.top!=None: #如果栈顶不为空
      return self.top.val #返回栈顶元素的值
    else:
      return None
  def push(self,n):#添加到栈中
    n=Node(n) #实例化节点
    n.next=self.top #顶端元素传值给一个指针
    self.top=n  #
    return n.val
  def pop(self): #退出栈
    if self.top == None:
      return None
    else:
      tmp=self.top.val
      self.top=self.top.next #下移一位,进行
      return tmp
if __name__=="__main__":
  s=stack()
  s.push(1)
  s.push(2)
  s.push(3)
  print s.pop()
  print s.pop()
  print s.pop()

打印的效果

3
2
1

应用:

数制转换:

1. 硬编码实现

#--coding: utf - 8--""
"
N = input("Please input a number::")
while (N):
  print "** @ **"
  N -= 1 ""
"
N = input("输入十进制数字(换算为八进制)::")
stack = []
string8 = ""
while (N):
  #求余
  stack.append(N % 8)# 求商
  N = N //8
while (len(stack) > 0):
  string8 += str(stack.pop())
print "转换为八进制:" + string8

2. 构建stack类,来实现

Stack1.py

#--coding: utf - 8--
class Stack(object):
  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 GetTop(self):
    return
self.items[len(self.items) - 1]

moshi.py

#--coding: utf - 8--
import stack1
shiyan = stack1.Stack()
stringu = ""
temp = input("请输入一个十进制数字::")
while (temp):
  shiyan.push(temp % 8)
  temp = temp / 8
while (not shiyan.isEmpty()):
  stringu += str(shiyan.pop())
print "八进制为::" + stringu

括号匹配

硬编码实现

#--coding:utf-8--
print "  ****括号匹配****  "
print """
输入原则: 每当你输入一个括号, 你需要再输入一个‘,'
进行区分, 例如:(, [, ], (, ), )
输入的可识别括号有(), [], {}
"""
strpp = raw_input("请输入一段括号表达式:")
basestr = strpp.split(',')
pstack = []
suoyin = {'(': ')','[': ']','{': '}'}
for e in basestr:
  if (e == '(' or e == '[' or e == '}'):
    pstack.append(e)
  else :
    if len(pstack) == 0:
      print "右括号多余"
      break
    else :
      if e == suoyin[pstack[len(pstack) - 1]]:
        pstack.pop()
      else :
        print "不匹配"
        print "右括号多余"
        break
if len(pstack) == 0:
  print "匹配正确"
else :
  print "左括号多余"

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
用Python中的__slots__缓存资源以节省内存开销的方法
Apr 02 Python
简单讲解Python编程中namedtuple类的用法
Jun 21 Python
Python 模块EasyGui详细介绍
Feb 19 Python
python机器学习之神经网络(二)
Dec 20 Python
python利用OpenCV2实现人脸检测
Apr 16 Python
15行Python代码带你轻松理解令牌桶算法
Mar 21 Python
Tensorflow之Saver的用法详解
Apr 23 Python
TensorFlow 模型载入方法汇总(小结)
Jun 19 Python
python实现图片筛选程序
Oct 24 Python
PyQt5 QListWidget选择多项并返回的实例
Jun 17 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
Oct 11 Python
简单了解python元组tuple相关原理
Dec 02 Python
Python scikit-learn 做线性回归的示例代码
Nov 01 #Python
机器学习python实战之手写数字识别
Nov 01 #Python
Python定时器实例代码
Nov 01 #Python
机器学习python实战之决策树
Nov 01 #Python
详解Python开发中如何使用Hook技巧
Nov 01 #Python
python利用标准库如何获取本地IP示例详解
Nov 01 #Python
你眼中的Python大牛 应该都有这份书单
Oct 31 #Python
You might like
php中的时间显示
2007/01/18 PHP
PHP自动选择 连接本地还是远程数据库
2010/12/02 PHP
浅析PKI加密解密 OpenSSL
2013/07/01 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
PHP下的浮点运算不准的解决方法
2016/10/27 PHP
js日历功能对象
2012/01/12 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
js实现tab切换效果
2017/02/16 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
javascript 玩转Date对象(实例讲解)
2017/07/11 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
Python中super的用法实例
2015/05/28 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
2018/12/19 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
python实现把二维列表变为一维列表的方法分析
2019/10/08 Python
Python通过递归获取目录下指定文件代码实例
2019/11/07 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
2020/10/15 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
Html5之svg可缩放矢量图形_动力节点Java学院整理
2017/07/17 HTML / CSS
音乐器材管理制度
2014/01/31 职场文书
广播体操比赛口号
2014/06/10 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
大学军训通讯稿
2015/07/18 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
Pytorch中TensorBoard及torchsummary的使用详解
2021/05/12 Python
使用Python拟合函数曲线
2022/04/14 Python