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脚本实现统计日志文件中的ip访问次数代码分享
Aug 06 Python
解析Python中的异常处理
Apr 28 Python
python爬虫使用cookie登录详解
Dec 27 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
Apr 17 Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 Python
对Python3.6 IDLE常用快捷键介绍
Jul 16 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
Jul 26 Python
详解python配置虚拟环境
Apr 08 Python
Python学习笔记之Break和Continue用法分析
Aug 14 Python
Python利用PyPDF2库获取PDF文件总页码实例
Apr 03 Python
如何学习Python time模块
Jun 03 Python
基于Python爬取fofa网页端数据过程解析
Jul 13 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中var_dump方法的使用详解
2013/06/24 PHP
使用PHP+MySql实现微信投票功能实例代码
2017/09/29 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
javascript实现的网页局布刷新效果
2008/12/01 Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
jquery弹出关闭遮罩层实例
2013/08/06 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
js 上传文件预览的简单实例
2016/08/16 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
vue实现公共方法抽离
2020/07/31 Javascript
js仿京东放大镜效果
2020/08/09 Javascript
python基础练习之几个简单的游戏
2017/11/10 Python
Django实现简单分页功能的方法详解
2017/12/05 Python
Python3.4解释器用法简单示例
2019/03/22 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
手把手教你将Flask应用封装成Docker服务的实现
2020/08/19 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
简单说下OSPF的操作过程
2014/08/13 面试题
关于母亲节的感言
2014/02/04 职场文书
联谊会主持词
2014/03/26 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
农村文化建设标语
2014/10/07 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
优秀班组申报材料
2014/12/25 职场文书
小学优秀学生评语
2014/12/29 职场文书
李强为自己工作观后感
2015/06/11 职场文书
基督教追悼会答谢词
2015/09/29 职场文书
导游词之吉林吉塔
2019/11/11 职场文书