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聊天室实例程序分享
Jan 05 Python
win10系统中安装scrapy-1.1
Jul 03 Python
在win和Linux系统中python命令行运行的不同
Jul 03 Python
Centos7 Python3下安装scrapy的详细步骤
Mar 15 Python
Django框架使用富文本编辑器Uedit的方法分析
Jul 31 Python
Pycharm取消py脚本中SQL识别的方法
Nov 29 Python
python写入文件自动换行问题的方法
Jul 05 Python
基于python操作ES实例详解
Nov 16 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
Keras使用tensorboard显示训练过程的实例
Feb 15 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 Python
Sentry的安装、配置、使用教程(Sentry日志手机系统)
Jul 23 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/02 无线电
php集成动态口令认证
2016/07/21 PHP
PHP房贷计算器实例代码,等额本息,等额本金
2017/04/01 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
PHP ob缓存以及ob函数原理实例解析
2020/11/13 PHP
javascript 全角转换实现代码
2009/07/17 Javascript
javascript 面向对象的JavaScript类
2010/05/04 Javascript
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
原生JS实现拖拽效果
2020/12/04 Javascript
[01:24]2014DOTA2 TI第二日 YYF表示这届谁赢都有可能
2014/07/11 DOTA
[01:48]帕吉至宝加入游戏,遗迹战场现“千劫神屠”
2018/04/07 DOTA
简明 Python 基础学习教程
2007/02/08 Python
浅谈python的dataframe与series的创建方法
2018/11/12 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
python pprint模块中print()和pprint()两者的区别
2020/02/10 Python
Python super()函数使用及多重继承
2020/05/06 Python
基于TensorFlow的CNN实现Mnist手写数字识别
2020/06/17 Python
Python使用文件操作实现一个XX信息管理系统的示例
2020/07/02 Python
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
HTML5拖放效果的实现代码
2016/11/17 HTML / CSS
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
自荐信怎么写好
2013/11/11 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
Python中rapidjson参数校验实现
2021/07/25 Python