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下的twisted框架入门指引
Apr 15 Python
Python的Urllib库的基本使用教程
Apr 30 Python
Python中列表和元组的相关语句和方法讲解
Aug 20 Python
Python3学习笔记之列表方法示例详解
Oct 06 Python
python3实现带多张图片、附件的邮件发送
Aug 10 Python
自适应线性神经网络Adaline的python实现详解
Sep 30 Python
把vgg-face.mat权重迁移到pytorch模型示例
Dec 27 Python
python实现简单井字棋游戏
Mar 04 Python
Python如何省略括号方法详解
Mar 21 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
May 18 Python
pytorch简介
Nov 11 Python
Python实现简繁体转换
Jun 07 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生成随机颜色的方法
2014/11/13 PHP
PHP控制反转(IOC)和依赖注入(DI)
2017/03/13 PHP
PHP CURL使用详解
2019/03/21 PHP
php转换上传word文件为PDF的方法【基于COM组件】
2019/06/10 PHP
讨论javascript(一)工厂方式 js面象对象的定义方法
2009/12/15 Javascript
jQuery实现图片信息的浮动显示实例代码
2013/08/28 Javascript
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
js实现分页功能
2017/05/24 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
2018/03/06 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
javascript网页随机点名实现过程解析
2019/10/15 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
Python爬取三国演义的实现方法
2016/09/12 Python
Django实现的自定义访问日志模块示例
2017/06/23 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
2018/03/23 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
Python使用百度api做人脸对比的方法
2019/08/28 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
python如何求100以内的素数
2020/05/27 Python
Falconeri美国官网:由羊绒和羊毛制成的针织服装
2018/04/08 全球购物
人力资源行政经理自我评价
2013/10/23 职场文书
乔迁宴答谢词
2014/01/21 职场文书
爱国主义演讲稿
2014/05/07 职场文书
党委领导班子整改方案
2014/09/30 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
Python OpenCV快速入门教程
2021/04/17 Python