Python可以实现栈的结构吗


Posted in Python onMay 27, 2020

栈(stack)又名堆栈,它是一种运算受限的线性表。在Python中可使用列表进行实现。

什么是栈?

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

如何实现?

在Python中使用列表来实现:

#!/usr/bin/env python 
#定义一个列表来模拟栈 
stack = [] 
#进栈,调用列表的append()函数加到列表的末尾,strip()没有参数是去掉首尾的空格 
def pushit(): 
 stack.append(raw_input('Enter new string: ').strip()) 
#出栈,用到了pop()函数 
def popit(): 
 if len(stack) == 0: 
  print 'Cannot pop from an empty stack!'
 else: 
  print 'Removed [', stack.pop(), ']'
#编历栈 
def viewstack(): 
 print stack 
#CMDs是字典的使用 
CMDs = {'u': pushit, 'o': popit, 'v': viewstack} 
#pr为提示字符 
def showmenu(): 
 pr = """ 
 p(U)sh 
 p(O)p 
 (V)iew 
 (Q)uit 
  Enter choice: """
 while True: 
  while True: 
   try: 
    #先用strip()去掉空格,再把第一个字符转换成小写的 
    choice = raw_input(pr).strip()[0].lower() 
   except (EOFError, KeyboardInterrupt, IndexError): 
    choice = 'q'
   print '\nYou picked: [%s]' % choice 
   if choice not in 'uovq': 
    print 'Invalid option, try again'
   else: 
    break
#CMDs[]根据输入的choice从字典中对应相应的value,比如说输入u,从字典中得到value为pushit,执行pushit()进栈操作 
  if choice == 'q': 
   break
  CMDs[choice]() 
#判断是否是从本文件进入,而不是被调用 
if __name__ == '__main__': 
 showmenu()

实例内容扩展:

# -*- coding:utf-8 -*-
# __author__ :kusy
# __content__:文件说明
# __date__:2018/9/30 17:28


class MyStack(object):
  def __init__(self):
    self.stack_list = []
    self.count = 0

  # 创建一个栈
  def create_stack(self):
    return self.stack_list

  # 栈中添加值
  def push(self, value):
    self.stack_list.insert(0,value)
    self.count += 1

  #返回栈顶元素值
  def peek(self):
    if self.count:
      return self.stack_list[0]

  # 删除栈顶元素
  def pop(self):
    self.stack_list.pop(0)
    self.count -= 1

  # 返回栈是否为空
  def is_empty(self):
    return self.count == 0

  #打印栈内容
  def print_all(self):
    for sl in self.stack_list:
      print(sl)

if __name__ == '__main__':
  ms = MyStack()
  ms.create_stack()
  ms.push(1)
  ms.push(2)
  ms.push(3)
  print('栈元素:')
  ms.print_all()
  print('栈顶元素:',ms.peek())
  ms.pop()
  print('栈顶元素删除后:')
  ms.print_all()
  print('栈是否为空:','是' if ms.is_empty() else '否')
  print('---继续删除元素')
  ms.pop()
  print('---继续删除元素')
  ms.pop()
  print('栈是否为空:','是' if ms.is_empty() else '否')

运行结果如下

C:\Users\suneee\AppData\Local\Programs\Python\Python36\python.exe E:/wangjz/PyWorkSpace/LearnPython/PY0929/stack.py
栈元素:
3
2
1
栈顶元素: 3
栈顶元素删除后:
2
1
栈是否为空: 否
---继续删除元素
---继续删除元素
栈是否为空: 是

Process finished with exit code 0

到此这篇关于Python可以实现栈的结构吗的文章就介绍到这了,更多相关Python实现栈的结构的条件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
举例讲解Python中is和id的用法
Apr 03 Python
Python 专题六 局部变量、全局变量global、导入模块变量
Mar 20 Python
利用python的socket发送http(s)请求方法示例
May 07 Python
Python中staticmethod和classmethod的作用与区别
Oct 11 Python
python 保存float类型的小数的位数方法
Oct 17 Python
Python设计模式之命令模式原理与用法实例分析
Jan 11 Python
python logging模块的使用总结
Jul 09 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
Dec 12 Python
python中wheel的用法整理
Jun 15 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 Python
python实现图像随机裁剪的示例代码
Dec 10 Python
详解OpenCV曝光融合
Apr 29 Python
Python如何脚本过滤文件中的注释
May 27 #Python
Python如何获取文件指定行的内容
May 27 #Python
Python web如何在IIS发布应用过程解析
May 27 #Python
利用Python实现某OA系统的自动定位功能
May 27 #Python
Python中常见的数制转换有哪些
May 27 #Python
Python如何实现邮件功能
May 27 #Python
Python中内建模块collections如何使用
May 27 #Python
You might like
PHP 金额数字转换成英文
2010/05/06 PHP
PHP5常用函数列表(分享)
2013/06/07 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
2012/01/15 Javascript
Jquery动态添加输入框的方法
2015/05/29 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
jQuery中设置form表单中action值的实现方法
2016/05/25 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
[06:35]2014DOTA2国际邀请赛 老男孩梦圆西雅图中国军团世界最强
2014/07/22 DOTA
王纯业的Python学习笔记 下载
2007/02/10 Python
python实现从ftp服务器下载文件的方法
2015/04/30 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
python实现音乐下载器
2018/04/15 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
澳大利亚著名的纺织品品牌:Canningvale
2020/05/05 全球购物
绝对经典成功的大学生推荐信
2013/11/08 职场文书
乡镇领导班子四风整顿行动工作汇报
2014/10/25 职场文书
内乡县衙导游词
2015/02/05 职场文书
雷峰塔导游词
2015/02/09 职场文书
世界文化遗产导游词
2015/02/13 职场文书
涨价通知
2015/04/23 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
python随机打印成绩排名表
2021/06/23 Python
spring boot中nativeQuery的用法
2021/07/26 Java/Android
vue打包时去掉所有的console.log
2022/04/10 Vue.js