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写asp详细讲解
Dec 16 Python
Python实现批量读取word中表格信息的方法
Jul 30 Python
Python文件与文件夹常见基本操作总结
Sep 19 Python
PyQt 线程类 QThread使用详解
Jul 16 Python
Python3 replace()函数使用方法
Mar 19 Python
python获取文件路径、文件名、后缀名的实例
Apr 23 Python
对python pandas读取剪贴板内容的方法详解
Jan 24 Python
Windows平台Python编程必会模块之pywin32介绍
Oct 01 Python
python sleep和wait对比总结
Feb 03 Python
详解Python小数据池和代码块缓存机制
Apr 07 Python
基于python实现银行管理系统
Apr 20 Python
python执行js代码的方法
May 13 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
用libtemplate实现静态网页生成
2006/10/09 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
jquery tools之tabs 选项卡/页签
2009/07/25 Javascript
autoPlay 基于jquery的图片自动播放效果
2011/12/07 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
jQuery提交表单ajax查询实例代码
2012/10/07 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
jQuery+HTML5实现图片上传前预览效果
2015/08/20 Javascript
js实现网页收藏功能
2015/12/17 Javascript
Angular ng-repeat 对象和数组遍历实例
2016/09/14 Javascript
JavaScript基础心法 数据类型
2018/03/05 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
详解如何从零开始搭建Express+Vue开发环境
2018/07/17 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
[03:18]DOTA2亚洲邀请赛小组赛第一日 RECAP赛事回顾
2015/01/30 DOTA
Python 文件操作技巧(File operation) 实例代码分析
2008/08/11 Python
深入理解Python中的内置常量
2017/05/20 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
Python+Kepler.gl实现时间轮播地图过程解析
2020/07/20 Python
让IE支持HTML5的方法
2012/12/11 HTML / CSS
给水排水工程专业毕业生推荐信
2013/10/28 职场文书
《雷雨》教学反思
2014/02/20 职场文书
教师个人自我评价范文
2014/04/13 职场文书
政府采购方案
2014/06/12 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
农村党员干部承诺书
2015/05/04 职场文书
新学期开学标语2015
2015/07/16 职场文书
SQL Server中锁的用法
2022/05/20 SQL Server