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中的pprint折腾记
Jan 21 Python
在Python中使用Neo4j数据库的教程
Apr 16 Python
Python实现图片转字符画的示例
Aug 22 Python
python中计算一个列表中连续相同的元素个数方法
Jun 29 Python
python3中函数参数的四种简单用法
Jul 09 Python
Python SMTP发送邮件遇到的一些问题及解决办法
Oct 24 Python
解决项目pycharm能运行,在终端却无法运行的问题
Jan 19 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
使用Python做定时任务及时了解互联网动态
May 15 Python
Python Django实现layui风格+django分页功能的例子
Aug 29 Python
django在保存图像的同时压缩图像示例代码详解
Feb 11 Python
Python常驻任务实现接收外界参数代码解析
Jul 21 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
农民C键的运用技巧
2020/03/04 星际争霸
PHP通过加锁实现并发情况下抢码功能
2016/08/10 PHP
php 变量引用与变量销毁机制详细介绍
2016/12/05 PHP
PHP中localeconv()函数的用法
2019/03/26 PHP
php面向对象重点知识分享
2019/09/27 PHP
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
2014/01/22 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
2015/04/27 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
Node.js实现文件上传
2016/07/05 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
利用Opencv实现图片的油画特效实例
2021/02/28 Python
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
构建高效课堂实施方案
2014/03/13 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
土地转让协议书
2014/04/15 职场文书
幼儿园中班评语大全
2014/04/17 职场文书
优秀共产党员先进事迹材料
2014/05/06 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
简爱读书笔记
2015/06/26 职场文书
重阳节活动主持词
2015/07/04 职场文书
餐厅服务员管理制度
2015/08/05 职场文书
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL