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回溯法实现数组全排列输出实例分析
Mar 17 Python
Python中datetime常用时间处理方法
Jun 15 Python
详解Python的Flask框架中的signals信号机制
Jun 13 Python
Python基础知识_浅谈用户交互
May 31 Python
对Python中range()函数和list的比较
Apr 19 Python
Python实现的企业粉丝抽奖功能示例
Jul 26 Python
python 批量修改 labelImg 生成的xml文件的方法
Sep 09 Python
python绘制BA无标度网络示例代码
Nov 21 Python
如何将 awk 脚本移植到 Python
Dec 09 Python
python中sympy库求常微分方程的用法
Apr 28 Python
Pycharm中如何关掉python console
Oct 27 Python
Flask中jinja2的继承实现方法及实例
Mar 03 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 form 表单传参明细研究
2009/07/17 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
Extjs学习笔记之七 布局
2010/01/08 Javascript
jQuery中append、insertBefore、after与insertAfter的简单用法与注意事项
2020/04/04 Javascript
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
整理JavaScript创建对象的八种方法
2015/11/03 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
js仿支付宝多方框输入支付密码效果
2016/09/27 Javascript
原生js实现无缝轮播图效果
2017/01/11 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
python实现simhash算法实例
2014/04/25 Python
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
Python创建模块及模块导入的方法
2015/05/27 Python
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
2018/03/15 Python
对python中raw_input()和input()的用法详解
2018/04/22 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
2020/01/19 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
人资专员岗位职责
2014/04/04 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
公司领导班子群众路线四风问题对照检查材料
2014/10/02 职场文书
出国导师推荐信
2015/03/25 职场文书
党员干部公开承诺书范文
2015/04/27 职场文书
国王的演讲观后感
2015/06/03 职场文书
孝女彩金观后感
2015/06/10 职场文书
表彰大会新闻稿
2015/07/17 职场文书
大学毕业谢师宴致辞
2015/07/27 职场文书
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python