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的Flask框架中实现分页功能的教程
Apr 20 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
Jun 14 Python
Python 高级专用类方法的实例详解
Sep 11 Python
python中找出numpy array数组的最值及其索引方法
Apr 17 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
Apr 26 Python
python 3.7.0 下pillow安装方法
Aug 27 Python
python实现两个dict合并与计算操作示例
Jul 01 Python
python matplotlib折线图样式实现过程
Nov 04 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
Python drop方法删除列之inplace参数实例
Jun 27 Python
Python全局变量与global关键字常见错误解决方案
Oct 05 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禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
php将金额数字转化为中文大写
2015/07/09 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
js里的prototype使用示例
2010/11/19 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
jQuery遍历对象、数组、集合实例
2014/11/08 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
2015/07/05 Javascript
JS获取input file绝对路径的方法(推荐)
2016/08/02 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
Python获取Linux系统下的本机IP地址代码分享
2014/11/07 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
python创建临时文件夹的方法
2015/07/06 Python
简析Python的闭包和装饰器
2016/02/26 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
python学习之hook钩子的原理和使用
2018/10/25 Python
Python hexstring-list-str之间的转换方法
2019/06/12 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
在Tensorflow中实现leakyRelu操作详解(高效)
2020/06/30 Python
python中pyplot基础图标函数整理
2020/11/10 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
安卓程序员求职信
2014/02/28 职场文书
培训主管的职业生涯规划
2014/03/06 职场文书
保密工作责任书
2014/04/16 职场文书
家长对老师的评语
2014/04/18 职场文书
先进党支部事迹材料
2014/12/24 职场文书