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 实现归并排序算法
Jun 05 Python
Python 实现链表实例代码
Apr 07 Python
python requests 使用快速入门
Aug 31 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
Django自定义用户认证示例详解
Mar 14 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
May 24 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
Jan 08 Python
python-视频分帧&amp;多帧合成视频实例
Dec 10 Python
Python hashlib模块实例使用详解
Dec 24 Python
Python模块future用法原理详解
Jan 20 Python
python的链表基础知识点
Sep 13 Python
Python3使用Selenium获取session和token方法详解
Feb 16 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
phpfans留言版用到的install.php
2007/01/04 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
php的laravel框架快速集成微信登录的方法
2016/12/12 PHP
PHP实现八皇后算法
2019/05/06 PHP
jQuery隔行变色与普通JS写法的对比
2013/04/21 Javascript
jsonp原理及使用
2013/10/28 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
2017/07/12 Javascript
详解如何给React-Router添加路由页面切换时的过渡动画
2019/04/25 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
Django自定义分页效果
2017/06/27 Python
python回调函数中使用多线程的方法
2017/12/25 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
Python 中的Selenium异常处理实例代码
2018/05/03 Python
django实现支付宝支付实例讲解
2019/10/17 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
2020/04/24 Python
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
Merchant 1948澳大利亚:新西兰领先的鞋类和靴子供应商
2018/03/24 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
.NET是怎么支持多种语言的
2015/02/24 面试题
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
物流管理毕业生自荐信
2013/10/24 职场文书
红领巾广播站广播稿
2014/02/01 职场文书
组织鉴定材料
2014/06/02 职场文书
2014年库房工作总结
2014/11/26 职场文书
员工2014年度工作总结
2014/12/09 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书