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基于PycURL实现POST的方法
Jul 25 Python
Python 专题六 局部变量、全局变量global、导入模块变量
Mar 20 Python
go和python变量赋值遇到的一个问题
Aug 31 Python
pygame实现俄罗斯方块游戏
Jun 26 Python
浅谈pandas用groupby后对层级索引levels的处理方法
Nov 06 Python
Python实战购物车项目的实现参考
Feb 20 Python
详解python中@的用法
Mar 27 Python
django 数据库 get_or_create函数返回值是tuple的问题
May 15 Python
pandas 像SQL一样使用WHERE IN查询条件说明
Jun 05 Python
matplotlib教程——强大的python作图工具库
Oct 15 Python
Python提取视频中图片的示例(按帧、按秒)
Oct 22 Python
python切片作为占位符使用实例讲解
Feb 17 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下用rmdir实现删除目录的三种方法小结
2008/04/20 PHP
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
php中定义网站根目录的常用方法
2010/08/08 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
Vue组件开发初探
2017/02/14 Javascript
Web制作验证码功能实例代码
2017/06/19 Javascript
详解使用vscode+es6写nodejs服务端调试配置
2017/09/21 NodeJs
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
2017/11/28 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
解决Vue @submit 提交后不刷新页面问题
2020/07/18 Javascript
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
[08:47]2018国际邀请赛 OG战队举杯时刻
2018/08/29 DOTA
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
Python+request+unittest实现接口测试框架集成实例
2018/03/16 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
Python爬虫实现vip电影下载的示例代码
2020/04/20 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
财务会计专业应届毕业生求职信
2013/10/18 职场文书
初中生学习生活的自我评价
2013/11/20 职场文书
平面设计求职信
2014/03/10 职场文书
家庭贫困证明
2014/09/23 职场文书
展览会邀请函
2015/02/02 职场文书
公积金贷款承诺书
2015/04/30 职场文书
实验心得体会范文
2016/01/25 职场文书
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis
详解redis在微服务领域的贡献
2021/10/16 Redis
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python