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程序添加图形化界面的教程
Apr 29 Python
python递归计算N!的方法
May 05 Python
使用tensorflow实现AlexNet
Nov 20 Python
Python生成短uuid的方法实例详解
May 29 Python
Python 带有参数的装饰器实例代码详解
Dec 06 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
pytorch实现建立自己的数据集(以mnist为例)
Jan 18 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
May 15 Python
sklearn的predict_proba使用说明
Jun 28 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
Aug 19 Python
Django crontab定时任务模块操作方法解析
Sep 10 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
Feb 25 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
NT IIS下用ODBC连接数据库
2006/10/09 PHP
Laravel 5 框架入门(三)
2015/04/09 PHP
php将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
微信支付的开发流程详解
2016/09/13 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
2018/04/27 PHP
Javascript中的Split使用方法与技巧
2007/03/09 Javascript
Javascript 学习书 推荐
2009/06/13 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
js实现星星打分效果的方法
2020/07/05 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
2016/01/07 Javascript
快速解决Canvas.toDataURL 图片跨域的问题
2016/05/10 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
javascript基础知识讲解
2017/01/11 Javascript
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
2017/10/27 Javascript
Node+OCR实现图像文字识别功能
2018/11/26 Javascript
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
JS代码实现页面切换效果
2021/01/10 Javascript
python将文本中的空格替换为换行的方法
2018/03/19 Python
python主线程捕获子线程的方法
2018/06/17 Python
python如何制作缩略图
2019/04/30 Python
python匿名函数用法实例分析
2019/08/03 Python
完美解决pycharm导入自己写的py文件爆红问题
2020/02/12 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
python代码能做成软件吗
2020/07/24 Python
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
寻找迷宫的一条出路,o通路;X:障碍
2016/07/10 面试题
大学生村官心得体会范文
2014/01/04 职场文书
教师个人自我鉴定
2014/02/08 职场文书
售后求职信范文
2014/03/15 职场文书
浅谈python数据类型及其操作
2021/05/25 Python
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python