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实现的金山快盘的签到程序
Jan 17 Python
python with statement 进行文件操作指南
Aug 22 Python
python实现简单购物商城
May 21 Python
简单实现python进度条脚本
Dec 18 Python
python dataframe astype 字段类型转换方法
Apr 11 Python
python将字符串以utf-8格式保存在txt文件中的方法
Oct 30 Python
PyQt 图解Qt Designer工具的使用方法
Aug 06 Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 Python
浅谈Pycharm最有必要改的几个默认设置项
Feb 14 Python
Visual Studio code 配置Python开发环境
Sep 11 Python
Selenium 配置启动项参数的方法
Dec 04 Python
pytorch常用数据类型所占字节数对照表一览
May 17 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中mysql_field_type()函数用法
2014/11/24 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
2016/04/11 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
很可爱的输入框
2008/08/03 Javascript
jQuery总体架构的理解分析
2011/03/07 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
基于javascript显示当前时间以及倒计时功能
2016/03/18 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
JS实现AES加密并与PHP互通的方法分析
2017/04/19 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
详解组件库的webpack构建速度优化
2018/06/18 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
python基础教程之字典操作详解
2014/03/25 Python
Python3遍历目录树实现方法
2015/05/22 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
python调用c++传递数组的实例
2019/02/13 Python
django数据库自动重连的方法实例
2019/07/21 Python
Python实现图像的垂直投影示例
2020/01/17 Python
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
Joseph官网:英国小众奢侈品牌
2019/05/17 全球购物
如何转换一个字符串到enum值
2014/04/12 面试题
《寓言两则》教学反思
2014/02/27 职场文书
三方股东合作协议书
2014/10/28 职场文书
民事申诉状范本
2015/05/20 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
python正则表达式re.search()的基本使用教程
2021/05/21 Python
Python代码风格与编程习惯重要吗?
2021/06/03 Python
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis