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中的socket模块使用代理实例
May 29 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
Python实现字符串逆序输出功能示例
Jun 24 Python
Python学生信息管理系统修改版
Mar 13 Python
Python基于多线程实现ping扫描功能示例
Jul 23 Python
详解小白之KMP算法及python实现
Apr 04 Python
Django Admin中增加导出Excel功能过程解析
Sep 04 Python
18个Python脚本可加速你的编码速度(提示和技巧)
Oct 17 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
Python 实现简单的客户端认证
Jul 29 Python
Python3基于plotly模块保存图片表格
Aug 03 Python
详解KMP算法以及python如何实现
Sep 18 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
模仿OSO的论坛(四)
2006/10/09 PHP
PHP array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
js树形控件脚本代码
2008/07/24 Javascript
JavaScript Sort 表格排序
2009/10/31 Javascript
javascript写的日历类(基于pj)
2010/12/28 Javascript
SOSO地图JS画出标注和中心点以html形式运行
2013/08/09 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
2016/08/30 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
js实现背景图自适应窗口大小
2017/01/10 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
js 索引下标之li集合绑定点击事件
2018/01/12 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
Vue中key的作用示例代码详解
2020/06/10 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
javascript中闭包closure的深入讲解
2021/03/03 Javascript
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
Matplotlib 生成不同大小的subplots实例
2018/05/25 Python
python3的数据类型及数据类型转换实例详解
2019/08/20 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
python实现双人五子棋(终端版)
2020/12/30 Python
网页设计个人找工作求职信
2013/11/28 职场文书
初二学生评语大全
2014/12/26 职场文书
给学校的建议书400字
2015/09/14 职场文书
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS
如何用python清洗文件中的数据
2021/06/18 Python
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技