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实现屏幕截图的代码及函数详解
Oct 01 Python
Django如何实现内容缓存示例详解
Sep 24 Python
Python读写zip压缩文件的方法
Aug 29 Python
实例分析python3实现并发访问水平切分表
Sep 29 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
May 30 Python
python实现爬取百度图片的方法示例
Jul 06 Python
django框架模板语言使用方法详解
Jul 18 Python
python+opencv边缘提取与各函数参数解析
Mar 09 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
Django-imagekit的使用详解
Jul 06 Python
python根据字典的键来删除元素的方法
Aug 16 Python
python在linux环境下安装skimage的示例代码
Oct 14 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
超外差式晶体管收音机的组装与统调
2021/03/01 无线电
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
谈谈新手如何学习PHP
2006/12/23 PHP
40个迹象表明你还是PHP菜鸟
2008/09/29 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
2014/03/20 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
PHP中类属性与类静态变量的访问方法示例
2016/07/13 PHP
php解决安全问题的方法实例
2019/09/19 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
JavaScript 原型继承
2011/12/26 Javascript
js multiple全选与取消全选实现代码
2012/12/04 Javascript
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
jquery如何获取复选框的值
2013/12/12 Javascript
Node.js异步I/O学习笔记
2014/11/04 Javascript
jQuery实现高亮显示网页关键词的方法
2015/08/07 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
利用Node.js+Koa框架实现前后端交互的方法
2017/02/27 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
2017/03/15 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
2017/06/11 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
layui--select使用以及下拉框实现键盘选择的例子
2019/09/24 Javascript
python控制台显示时钟的示例
2014/02/24 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
选择Python写网络爬虫的优势和理由
2019/07/07 Python
Python文件路径名的操作方法
2019/10/30 Python
python取均匀不重复的随机数方式
2019/11/27 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
计算机应用与科学个人的自我评价
2013/11/15 职场文书
会计专业毕业生自荐信范文
2013/12/20 职场文书
运动会稿件300字
2014/02/14 职场文书
运动会宣传口号
2014/06/09 职场文书
党建工作整改措施
2014/10/28 职场文书
经费申请报告
2015/05/15 职场文书
如何写通讯稿
2015/07/22 职场文书
详解Vue router路由
2021/11/20 Vue.js