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和GO语言实现的消息摘要算法示例
Mar 10 Python
python 爬取微信文章
Jan 30 Python
深入理解python中的select模块
Apr 23 Python
带你了解python装饰器
Jun 15 Python
python paramiko模块学习分享
Aug 23 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
Python3+Appium安装使用教程
Jul 05 Python
python单例模式的多种实现方法
Jul 26 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
完美解决jupyter由于无法import新包的问题
May 26 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
如何选购合适的收音机
2021/03/01 无线电
深入了解php4(1)--回到未来
2006/10/09 PHP
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
php获取linux命令结果的实例
2017/03/13 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
用javascript实现页面打印的三种方法
2007/03/05 Javascript
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
JQuery入门—编写一个简单的JQuery应用案例
2013/01/03 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
js数组常见操作及数组与字符串相互转化实例详解
2015/11/10 Javascript
jQuery Validate表单验证入门学习
2015/12/18 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
Node.js与Sails redis组件的使用教程
2017/02/14 Javascript
Vue.2.0.5过渡效果使用技巧
2017/03/16 Javascript
webpack打包js的方法
2018/03/12 Javascript
JavaScript 扩展运算符用法实例小结【基于ES6】
2019/06/17 Javascript
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
Python中返回字典键的值的values()方法使用
2015/05/22 Python
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
Python日志模块logging基本用法分析
2018/08/23 Python
IntelliJ IDEA安装运行python插件方法
2018/12/10 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
HTML5 与 XHTML2
2008/10/17 HTML / CSS
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
捐助感谢信
2015/01/22 职场文书
硕士学位申请报告
2015/05/15 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书
react 路由Link配置详解
2021/11/11 Javascript