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使用lxml模块和Requests模块抓取HTML页面的教程
May 16 Python
Python 两个列表的差集、并集和交集实现代码
Sep 21 Python
Python字符串处理实例详解
May 18 Python
Python实现学校管理系统
Jan 11 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
Apr 23 Python
浅谈django的render函数的参数问题
Oct 16 Python
Python这样操作能存储100多万行的xlsx文件
Apr 16 Python
python模拟鼠标点击和键盘输入的操作
Aug 04 Python
Tensorflow限制CPU个数实例
Feb 06 Python
如何利用Python写个坦克大战
Nov 18 Python
Python 的 sum() Pythonic 的求和方法详细
Oct 16 Python
Python中异常处理用法
Nov 27 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数据库连接
2006/10/09 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
PHP抽象类和接口用法实例详解
2019/07/20 PHP
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
script标签属性用type还是language
2015/01/21 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
python处理json数据中的中文
2014/03/06 Python
python基础教程之对象和类的实际运用
2014/08/29 Python
python实现端口转发器的方法
2015/03/13 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
Django 静态文件配置过程详解
2019/07/23 Python
利用python实现短信和电话提醒功能的例子
2019/08/08 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
2020/03/08 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
Python如何解除一个装饰器
2020/08/07 Python
css3动画效果抖动解决方法
2018/09/03 HTML / CSS
HTML5 Video/Audio播放本地文件示例介绍
2013/11/18 HTML / CSS
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
PHP两种查询函数array/row的区别
2013/06/03 面试题
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
2015年乡镇民政工作总结
2015/05/13 职场文书
高质量“欢迎词”
2019/04/03 职场文书
字典算法实现及操作 --python(实用)
2021/03/31 Python
教你使用pyinstaller打包Python教程
2021/05/27 Python
Python+Appium自动化测试的实战
2021/06/30 Python
我的收音机情缘
2022/04/05 无线电