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中assert用法实例分析
Apr 30 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
Apr 30 Python
python append、extend与insert的区别
Oct 13 Python
Python通过matplotlib绘制动画简单实例
Dec 13 Python
解决pyttsx3无法封装的问题
Dec 24 Python
对python3 Serial 串口助手的接收读取数据方法详解
Jun 12 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
Jun 19 Python
python pandas写入excel文件的方法示例
Jun 25 Python
基于Python数据结构之递归与回溯搜索
Feb 26 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
Jun 11 Python
详解Pycharm安装及Django安装配置指南
Sep 15 Python
python中time tzset()函数实例用法
Feb 18 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
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
深入eAccelerator与memcached的区别详解
2013/06/06 PHP
图片自动更新(说明)
2006/10/02 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
jQuery中has()方法用法实例
2015/01/06 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
2016/09/05 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
使用vs code开发Nodejs程序的使用方法
2017/09/21 NodeJs
js中this对象用法分析
2018/01/05 Javascript
vue 指定组件缓存实例详解
2018/04/01 Javascript
Vue组件中prop属性使用说明实例代码详解
2018/05/31 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
2020/11/12 Javascript
使用webpack5从0到1搭建一个react项目的实现步骤
2020/12/16 Javascript
[54:02]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 IG vs VGJ.T
2018/04/03 DOTA
python入门基础之用户输入与模块初认识
2016/11/14 Python
MySQL适配器PyMySQL详解
2017/09/20 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
Python实现仿射密码的思路详解
2020/04/23 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
Python实现进度条和时间预估的示例代码
2020/06/02 Python
成功的酒店创业计划书
2013/12/27 职场文书
建筑项目策划书
2014/01/13 职场文书
公司离职证明范本
2014/01/13 职场文书
招聘单位介绍信
2014/01/14 职场文书
幼儿园毕业寄语
2014/04/03 职场文书
中层干部竞聘演讲稿
2014/05/15 职场文书
运动员加油词
2015/07/18 职场文书